pythinker-code 0.45.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.45.0 → pythinker_code-0.47.0}/PKG-INFO +23 -24
  2. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/README.md +22 -23
  3. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/CHANGELOG.md +98 -0
  5. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/session.py +8 -0
  6. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/agent.yaml +4 -0
  7. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/app.py +19 -2
  8. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/__init__.py +13 -2
  9. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/mcp.py +104 -27
  10. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/plugin.py +230 -1
  11. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/config.py +74 -0
  12. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompt_templates.py +5 -1
  25. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/__init__.py +5 -0
  26. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/__init__.py +6 -8
  27. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/agent.py +42 -17
  28. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/pythinkersoul.py +179 -4
  33. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/toolset.py +421 -88
  34. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/agent/__init__.py +63 -1
  37. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/agent/description.md +9 -0
  38. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read_media.py +21 -4
  39. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/__init__.py +15 -1
  42. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/description.md +3 -0
  43. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/recall/__init__.py +71 -10
  44. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/recall/description.md +6 -3
  45. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/__init__.py +58 -4
  52. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/markdown.py +41 -1
  53. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/report.py +13 -3
  54. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/prompt.py +69 -10
  55. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/slash.py +59 -1
  56. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +69 -5
  57. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/update.py +7 -1
  58. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +14 -3
  59. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +10 -2
  60. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +21 -5
  61. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/theme.py +2 -2
  62. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/io.py +31 -0
  63. pythinker_code-0.47.0/src/pythinker_code/utils/mcp_names.py +60 -0
  64. pythinker_code-0.47.0/src/pythinker_code/utils/media_limits.py +20 -0
  65. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-BgGrIJTG.js +1 -0
  66. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-Cmrv4t4A.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-Czbbrggh.js +1 -1
  67. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-DJtt-l4b.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-DuGxQ4gb.js +1 -1
  68. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/bootstrap-GQDZdCZn.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/bootstrap-BRW86uxF.js +5 -5
  69. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-o0KsSeIT.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-C9QqOozv.js +1 -1
  70. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/channel-Bw8F6co7.js +1 -0
  71. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-CVPDc3uI.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-CLDwXFrS.js +1 -1
  72. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-Tu9TJ8FO.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-CgPHKDsU.js +1 -1
  73. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-CoBmhCur.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-DhesutHE.js +1 -1
  74. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-DByzCodm.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-mTEiNOi3.js +1 -1
  75. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-DclqBNWp.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-DlSrZz-k.js +1 -1
  76. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-CUIX1-rb.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-D0YCOqn9.js +1 -1
  77. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-gOR8tSRc.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-CLY2Nkh7.js +4 -4
  78. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-hta5hym2.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-DbcFg-5f.js +1 -1
  79. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-cj__FNrg.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-8WkWOyc_.js +1 -1
  80. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-CSHDE7c1.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-BUgkoo7u.js +2 -2
  81. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-DMFQO6Cb.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-C0HJXIEZ.js +1 -1
  82. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-Cjm014we.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-DBQjspgy.js +1 -1
  83. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-BSr1l1Fd.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-Y2JuT_28.js +1 -1
  84. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-veNzkohb.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-BSQmvLlf.js +1 -1
  85. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-B3WrcDb4.js +1 -0
  86. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-B3WrcDb4.js +1 -0
  87. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DTgIHAkQ.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-COJFtT1s.js +1 -1
  88. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-D-_HCbAC.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-C-63xbhz.js +1 -1
  89. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-CvX58Rpg.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-BA3t5dvt.js +1 -1
  90. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-CsRaiNkg.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Cn_tPFPy.js +1 -1
  91. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Dn6aiXG5.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-CNLlhwgh.js +1 -1
  92. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-DXQlab3r.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-BubQEJye.js +1 -1
  93. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-BWB_FmTS.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-B1zoPW4f.js +1 -1
  94. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/dist-C8Q1EY4S.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/dist-C-YVtz9k.js +1 -1
  95. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-BrQiudEc.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-BrFwtQIS.js +1 -1
  96. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-DjypEbTa.js +1 -0
  97. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-C6jARfsw.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-CMde8qln.js +1 -1
  98. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DH-i7Wci.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DqKHO3Gj.js +1 -1
  99. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-lU8PeAwh.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-DSsm7EeH.js +1 -1
  100. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-JOoIM40T.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-BPXFnSJu.js +1 -1
  101. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/index-BJIE96ev.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/index-DrLJ6Yzo.js +2 -2
  102. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/info-J43DQDTF-B9a8E9HF.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/info-J43DQDTF-Ckpo8amK.js +1 -1
  103. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-D5wmE10q.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-BvhEvq2y.js +1 -1
  104. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-DzNdTJqt.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BGVm0gpH.js +1 -1
  105. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-CwevEltw.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-DGjKVrAu.js +1 -1
  106. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-BAmLyJgC.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DF4Ru5vp.js +1 -1
  107. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/line-CktbshjS.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/line-zsX5pPNl.js +1 -1
  108. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BY1nFAIo.js +1 -0
  109. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/mermaid-parser.core-B1Hc3VHx.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mermaid-parser.core-DgXtwV12.js +2 -2
  110. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/mermaid.core-zqRnwN3B.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mermaid.core-DDTnZJwj.js +3 -3
  111. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-CamoLUlD.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DP-UXBwG.js +1 -1
  112. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/packet-YPE3B663-s78KeeiS.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/packet-YPE3B663-Dx3OSICL.js +1 -1
  113. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-DSusaq_V.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-IY3KukRR.js +1 -1
  114. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-BcJSWsmz.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-Ch0k4QrE.js +1 -1
  115. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Cxp3MYGY.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-B8RbtJ2P.js +1 -1
  116. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-sZyAfli_.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-D0YLOyN_.js +1 -1
  117. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-DSaeIAHw.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BTYkIO2O.js +1 -1
  118. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-BI87xNZ8.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-C3lqfCj1.js +1 -1
  119. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-B3mOEaPg.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-CxovAw-L.js +1 -1
  120. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-CloKSCZq.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-BAkLX0tZ.js +1 -1
  121. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-DsW61nNZ.js +1 -0
  122. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-dy1xxojp.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-D8o-ffC-.js +1 -1
  123. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CouMM8Ld.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CKwJMtWj.js +1 -1
  124. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-BurOGxmB.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-0nn1YylS.js +1 -1
  125. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-ceoQfI8-.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-BEkXoyJ2.js +1 -1
  126. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-DQIeshOY.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-BielzF7q.js +1 -1
  127. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-yJgnjbxz.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-CbsH-9xk.js +1 -1
  128. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-jMkhXWCc.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-D4gCiMTY.js +1 -1
  129. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/index.html +1 -1
  130. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/server.py +24 -1
  131. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/types.py +81 -1
  132. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-CxeoRZcL.js +0 -1
  133. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/channel-CzOfc6qg.js +0 -1
  134. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-Cl__vhhZ.js +0 -1
  135. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-Cl__vhhZ.js +0 -1
  136. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-1z7xo-Al.js +0 -1
  137. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B9qVFSXg.js +0 -1
  138. pythinker_code-0.45.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-bwtGCtLW.js +0 -1
  139. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/LICENSE +0 -0
  140. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/NOTICE +0 -0
  141. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/__init__.py +0 -0
  142. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/__main__.py +0 -0
  143. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  144. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/__init__.py +0 -0
  145. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/convert.py +0 -0
  146. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/host.py +0 -0
  147. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/mcp.py +0 -0
  148. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/server.py +0 -0
  149. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/tools.py +0 -0
  150. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/types.py +0 -0
  151. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/version.py +0 -0
  152. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
  153. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  154. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  155. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
  156. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  157. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  158. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  159. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  160. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  161. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
  162. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  163. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
  164. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  165. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/system.md +0 -0
  166. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  167. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  168. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/agentspec.py +0 -0
  169. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  170. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  171. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  172. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/__init__.py +0 -0
  173. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/alibaba.py +0 -0
  174. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  175. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  176. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/deepseek.py +0 -0
  177. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  178. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/kimi.py +0 -0
  179. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  180. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/minimax.py +0 -0
  181. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/moonshot.py +0 -0
  182. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/oauth.py +0 -0
  183. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/ollama.py +0 -0
  184. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  185. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  186. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  187. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  188. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  189. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  190. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/login.py +0 -0
  191. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/models.py +0 -0
  192. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
  193. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  194. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openrouter.py +0 -0
  195. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/platforms.py +0 -0
  196. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/z_ai.py +0 -0
  197. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/__init__.py +0 -0
  198. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/agent_runner.py +0 -0
  199. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/ids.py +0 -0
  200. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/manager.py +0 -0
  201. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/models.py +0 -0
  202. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/store.py +0 -0
  203. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/summary.py +0 -0
  204. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/background/worker.py +0 -0
  205. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/__main__.py +0 -0
  206. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  207. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/dashboard.py +0 -0
  208. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/debug.py +0 -0
  209. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/export.py +0 -0
  210. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/info.py +0 -0
  211. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/review.py +0 -0
  212. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/secscan.py +0 -0
  213. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/security_scan.py +0 -0
  214. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/skill.py +0 -0
  215. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/system_prompt.py +0 -0
  216. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/toad.py +0 -0
  217. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/update.py +0 -0
  218. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/web.py +0 -0
  219. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/constant.py +0 -0
  220. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/__init__.py +0 -0
  221. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
  222. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
  223. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
  224. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/system.py +0 -0
  225. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/app.py +0 -0
  226. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
  227. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
  228. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
  229. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  230. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  231. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  232. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  233. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  234. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  235. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  236. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
  237. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/index.html +0 -0
  238. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/events.py +0 -0
  239. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/exception.py +0 -0
  240. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/execution_profiles.py +0 -0
  241. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/extensions.py +0 -0
  242. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/feedback.py +0 -0
  243. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/feedback_repo.py +0 -0
  244. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/file_restore.py +0 -0
  245. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/__init__.py +0 -0
  246. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/config.py +0 -0
  247. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/engine.py +0 -0
  248. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/events.py +0 -0
  249. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/runner.py +0 -0
  250. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/__init__.py +0 -0
  251. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/consolidation.py +0 -0
  252. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/harvest.py +0 -0
  253. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/recall.py +0 -0
  254. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/recap.py +0 -0
  255. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/retriever.py +0 -0
  256. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/sanitize.py +0 -0
  257. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/metadata.py +0 -0
  258. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/models_dev.py +0 -0
  259. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/native.py +0 -0
  260. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/__init__.py +0 -0
  261. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/llm.py +0 -0
  262. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/manager.py +0 -0
  263. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/models.py +0 -0
  264. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/notifier.py +0 -0
  265. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/store.py +0 -0
  266. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/wire.py +0 -0
  267. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/plugin/__init__.py +0 -0
  268. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/plugin/manager.py +0 -0
  269. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/plugin/tool.py +0 -0
  270. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/project_memory.py +0 -0
  271. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/project_trust.py +0 -0
  272. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/best_practices.md +0 -0
  273. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/compact.md +0 -0
  274. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
  275. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/goal_set.md +0 -0
  276. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
  277. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/init.md +0 -0
  278. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/learn.md +0 -0
  279. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/py.typed +0 -0
  280. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/scratchpad.py +0 -0
  281. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/session.py +0 -0
  282. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/session_cleanup.py +0 -0
  283. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/session_fork.py +0 -0
  284. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/session_recap.py +0 -0
  285. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/session_state.py +0 -0
  286. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/share.py +0 -0
  287. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  288. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  289. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  290. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/lockfile.py +0 -0
  291. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  292. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  293. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  294. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  295. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
  296. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  297. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  298. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  299. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  300. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  301. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  302. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  303. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  304. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  305. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  306. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  307. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  308. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/__init__.py +0 -0
  309. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/api_errors.py +0 -0
  310. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/approval.py +0 -0
  311. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/btw.py +0 -0
  312. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  313. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/context.py +0 -0
  314. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/deliberation.py +0 -0
  315. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  316. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  317. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  318. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  319. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
  320. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
  321. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
  322. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
  323. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
  324. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  325. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/flow_runner.py +0 -0
  326. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/message.py +0 -0
  327. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/permission.py +0 -0
  328. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/slash.py +0 -0
  329. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/__init__.py +0 -0
  330. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/builder.py +0 -0
  331. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/codenames.py +0 -0
  332. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/core.py +0 -0
  333. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/git_context.py +0 -0
  334. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/models.py +0 -0
  335. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/output.py +0 -0
  336. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/registry.py +0 -0
  337. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/runner.py +0 -0
  338. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/store.py +0 -0
  339. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/usage.py +0 -0
  340. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/worktree.py +0 -0
  341. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  342. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/config.py +0 -0
  343. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/crash.py +0 -0
  344. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/errors.py +0 -0
  345. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  346. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/otel.py +0 -0
  347. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  348. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/sink.py +0 -0
  349. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/thinking.py +0 -0
  350. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  351. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/__init__.py +0 -0
  352. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  353. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  354. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  355. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  356. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/input.md +0 -0
  357. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/list.md +0 -0
  358. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/output.md +0 -0
  359. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/stop.md +0 -0
  360. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/display.py +0 -0
  361. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  362. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  363. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  364. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/glob.md +0 -0
  365. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/glob.py +0 -0
  366. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/grep.md +0 -0
  367. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  368. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  369. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read.md +0 -0
  370. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read.py +0 -0
  371. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  372. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/replace.md +0 -0
  373. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/replace.py +0 -0
  374. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/utils.py +0 -0
  375. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/write.md +0 -0
  376. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/write.py +0 -0
  377. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
  378. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
  379. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  380. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  381. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  382. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  383. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
  384. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  385. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  386. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  387. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  388. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  389. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/progress/description.md +0 -0
  390. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  391. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  392. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  393. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  394. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  395. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  396. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
  397. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/skill/description.md +0 -0
  398. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  399. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  400. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/test.py +0 -0
  401. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  402. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/think/think.md +0 -0
  403. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  404. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/utils.py +0 -0
  405. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  406. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  407. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  408. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  409. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/search.md +0 -0
  410. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/search.py +0 -0
  411. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/__init__.py +0 -0
  412. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  413. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/color_utils.py +0 -0
  414. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  415. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  416. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  417. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  418. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  419. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  420. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  421. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  422. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  423. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  424. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  425. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  426. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  427. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  428. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  429. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  430. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/console.py +0 -0
  431. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  432. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  433. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  434. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  435. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  436. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  437. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  438. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  439. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  440. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  441. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  442. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  443. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  444. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  445. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  446. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  447. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  448. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  449. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  450. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  451. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  452. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  453. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  454. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  455. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  456. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  457. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  458. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  459. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  460. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  461. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
  462. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
  463. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  464. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  465. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  466. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  467. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  468. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  469. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  470. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  471. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  472. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  473. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  474. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  475. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  476. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  477. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  478. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  479. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  480. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  481. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  482. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  483. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  484. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  485. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  486. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  487. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  488. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  489. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  490. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  491. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  492. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  493. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  494. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  495. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  496. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  497. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  498. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  499. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  500. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  501. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  502. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  503. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  504. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  505. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  506. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/terminal_background.py +0 -0
  507. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  508. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/tui_config.py +0 -0
  509. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/update_policy.py +0 -0
  510. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  511. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/__init__.py +0 -0
  512. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  513. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  514. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/artifacts.py +0 -0
  515. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/broadcast.py +0 -0
  516. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/changelog.py +0 -0
  517. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/clipboard.py +0 -0
  518. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/datetime.py +0 -0
  519. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/diff.py +0 -0
  520. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/editor.py +0 -0
  521. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/environment.py +0 -0
  522. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/envvar.py +0 -0
  523. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/export.py +0 -0
  524. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/file_filter.py +0 -0
  525. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
  526. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  527. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/gitignore.py +0 -0
  528. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/logging.py +0 -0
  529. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/media_tags.py +0 -0
  530. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/message.py +0 -0
  531. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/path.py +0 -0
  532. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/proctitle.py +0 -0
  533. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/proxy.py +0 -0
  534. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  535. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  536. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  537. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  538. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  539. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  540. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  541. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  542. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/sensitive.py +0 -0
  543. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/server.py +0 -0
  544. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/signals.py +0 -0
  545. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  546. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  547. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/string.py +0 -0
  548. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  549. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/term.py +0 -0
  550. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/trust.py +0 -0
  551. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/typing.py +0 -0
  552. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/__init__.py +0 -0
  553. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/__init__.py +0 -0
  554. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/config.py +0 -0
  555. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/open_in.py +0 -0
  556. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/sessions.py +0 -0
  557. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/app.py +0 -0
  558. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/auth.py +0 -0
  559. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/models.py +0 -0
  560. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  561. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/messages.py +0 -0
  562. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/process.py +0 -0
  563. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/worker.py +0 -0
  564. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/_headers +0 -0
  565. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  566. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  567. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  568. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  569. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  570. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  571. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  572. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  573. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  574. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  575. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  576. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  577. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  578. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  579. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  580. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  581. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  582. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  583. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  584. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  585. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  586. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  587. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  588. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  589. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  590. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  591. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  592. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  593. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  594. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  595. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  596. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  597. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  598. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  599. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  600. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  601. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  602. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  603. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  604. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  605. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  606. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  607. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  608. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  609. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  610. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  611. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  612. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  613. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  614. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  615. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  616. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  617. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  618. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  619. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  620. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  621. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  622. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  623. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  624. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
  625. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
  626. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
  627. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
  628. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
  629. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
  630. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
  631. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
  632. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
  633. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
  634. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
  635. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
  636. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
  637. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
  638. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
  639. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
  640. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
  641. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
  642. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  643. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
  644. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  645. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
  646. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
  647. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
  648. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
  649. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
  650. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
  651. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
  652. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
  653. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
  654. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
  655. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
  656. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
  657. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
  658. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
  659. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  660. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  661. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  662. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  663. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
  664. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
  665. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
  666. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
  667. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
  668. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
  669. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
  670. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
  671. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
  672. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
  673. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
  674. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
  675. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
  676. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
  677. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
  678. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
  679. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
  680. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  681. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
  682. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
  683. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
  684. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
  685. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
  686. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
  687. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
  688. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
  689. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
  690. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
  691. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
  692. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
  693. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
  694. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
  695. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
  696. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
  697. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
  698. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
  699. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
  700. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
  701. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
  702. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
  703. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
  704. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
  705. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
  706. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
  707. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
  708. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  709. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
  710. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
  711. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
  712. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
  713. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
  714. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
  715. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  716. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
  717. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
  718. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
  719. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
  720. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  721. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  722. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
  723. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
  724. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
  725. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
  726. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
  727. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
  728. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
  729. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
  730. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
  731. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  733. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
  735. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
  736. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  737. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
  738. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
  739. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
  740. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
  741. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
  742. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
  743. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
  744. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
  745. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
  746. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
  747. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  748. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  749. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  750. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  751. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  752. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  753. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
  754. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
  755. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
  756. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
  757. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
  758. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
  759. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
  760. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
  761. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
  762. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
  763. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
  764. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
  765. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
  766. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
  767. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
  768. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
  769. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
  770. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
  771. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
  772. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
  773. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  775. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  777. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  779. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  780. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
  781. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
  782. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
  783. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
  784. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
  785. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
  786. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
  787. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
  788. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  789. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
  790. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
  791. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
  792. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
  793. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
  794. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  795. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  796. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  797. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
  798. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
  799. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
  800. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
  801. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
  802. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
  803. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
  804. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
  805. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
  806. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
  807. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
  808. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
  809. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
  810. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
  811. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
  812. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
  813. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
  814. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
  815. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
  816. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
  817. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
  818. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
  819. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
  820. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
  821. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  822. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  823. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  824. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  825. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
  826. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
  827. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
  828. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
  829. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
  830. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
  831. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
  832. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
  833. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
  834. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
  835. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
  836. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
  837. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
  838. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
  839. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
  840. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
  841. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  842. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
  843. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
  844. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
  845. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
  846. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
  847. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  848. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
  849. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
  850. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  851. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
  852. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
  853. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
  854. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
  855. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
  856. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
  857. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
  858. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
  859. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
  860. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
  861. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
  862. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
  863. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
  864. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
  865. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
  866. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
  867. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
  868. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
  869. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
  870. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
  871. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
  872. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
  873. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
  874. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
  875. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
  876. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
  877. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
  878. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
  879. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
  880. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
  881. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
  882. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
  883. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
  884. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
  885. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
  886. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
  887. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
  888. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  889. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  890. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
  891. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
  892. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
  893. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
  894. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
  895. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
  896. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
  897. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
  898. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
  899. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
  900. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
  901. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
  902. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
  903. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
  904. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
  905. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  906. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
  907. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  908. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
  909. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
  910. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
  911. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
  912. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
  913. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
  914. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
  915. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
  916. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
  917. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
  918. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
  919. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
  920. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
  921. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
  922. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
  923. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  924. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  925. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
  926. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
  927. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
  928. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
  929. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
  930. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
  931. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
  932. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  933. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
  934. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
  935. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
  936. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
  937. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
  938. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
  939. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
  940. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
  941. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
  942. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
  943. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
  944. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
  945. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
  946. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
  947. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
  948. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
  949. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
  950. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  951. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  952. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
  953. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
  954. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
  955. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
  956. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
  957. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
  958. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
  959. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
  960. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
  961. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
  962. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
  963. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
  964. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
  965. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
  966. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
  967. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
  968. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
  969. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  970. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  971. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  972. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  973. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  974. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  975. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  976. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  977. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  978. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  979. {pythinker_code-0.45.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.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  981. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  982. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  983. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  984. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  985. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  986. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  987. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  988. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  989. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  990. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  991. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  992. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/install.sh +0 -0
  993. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/logo.png +0 -0
  994. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/store/__init__.py +0 -0
  995. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/web/store/sessions.py +0 -0
  996. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/__init__.py +0 -0
  997. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/file.py +0 -0
  998. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  999. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/protocol.py +0 -0
  1000. {pythinker_code-0.45.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1001. {pythinker_code-0.45.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.45.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,14 +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.45.0
118
+ ## 🆕 What's New in 0.47.0
119
119
 
120
- - **Agent-tracing dashboard.** `pythinker dashboard` opens a local web UI for inspecting sessions, wire events, context messages, tool statistics, and usage over time also reachable from the shell via `/reports` or `/dashboard`.
121
- - **Project instructions immune to compaction.** `AGENTS.md` is now delivered as a fresh `<system-reminder>` on every request instead of being baked into the system prompt, so compaction can never summarize it away and the token budget can never truncate it. `pythinker system-prompt` shows the assembled prompt with the reminder below a labeled divider.
122
- - **Accept-edits mode.** `/accept-edits` auto-approves reversible in-workspace file edits while still prompting for shell, destructive, config, and sensitive host-file writes (`.git/hooks`, `.zshrc`, `.ssh`, etc.) never swept into the auto-approve tier.
123
- - **Recover from output-token truncation.** When a turn is cut off by the output-token limit, the model is nudged to continue from where it stopped (up to `loop_control.max_truncation_recoveries` times, default 3) instead of treating a half-finished answer as complete.
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.
124
123
 
125
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.45.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).
126
125
 
127
126
 
128
127
  ---
@@ -212,7 +211,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
212
211
 
213
212
  | Platform | Recommended install | Artifact source |
214
213
  |---|---|---|
215
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.45.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) |
216
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) |
217
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 |
218
217
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -240,7 +239,7 @@ pythinker # start the interactive TUI
240
239
 
241
240
  ### 🪟 Windows — native installer
242
241
 
243
- `PythinkerSetup-0.45.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
244
243
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
245
244
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
246
245
  the change. **No UAC prompt.**
@@ -251,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
251
250
 
252
251
  # Or manually download the installer + checksum from the Releases page,
253
252
  # verify with Get-FileHash, then run:
254
- .\PythinkerSetup-0.45.0.exe
253
+ .\PythinkerSetup-0.47.0.exe
255
254
 
256
255
  # Open a fresh PowerShell
257
256
  pythinker --version
258
257
  ```
259
258
 
260
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.45.0.exe /ALLUSERS`
259
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.47.0.exe /ALLUSERS`
261
260
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
262
261
 
263
262
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -315,26 +314,26 @@ attached to every GitHub Release.
315
314
 
316
315
  ```sh
317
316
  # Debian / Ubuntu (x86_64)
318
- sudo dpkg -i pythinker-code_0.45.0_amd64.deb
317
+ sudo dpkg -i pythinker-code_0.47.0_amd64.deb
319
318
  sudo apt-get install -f # only if dpkg reports missing deps
320
319
 
321
320
  # Debian / Ubuntu (ARM64)
322
- sudo dpkg -i pythinker-code_0.45.0_arm64.deb
321
+ sudo dpkg -i pythinker-code_0.47.0_arm64.deb
323
322
 
324
323
  # Fedora / RHEL / openSUSE (x86_64)
325
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.x86_64.rpm
326
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.x86_64.rpm.sha256
327
- sha256sum -c pythinker-code-0.45.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
328
327
  # Fedora / RHEL:
329
- sudo dnf install ./pythinker-code-0.45.0.x86_64.rpm
328
+ sudo dnf install ./pythinker-code-0.47.0.x86_64.rpm
330
329
  # openSUSE:
331
- sudo zypper install ./pythinker-code-0.45.0.x86_64.rpm
330
+ sudo zypper install ./pythinker-code-0.47.0.x86_64.rpm
332
331
 
333
332
  # Fedora / RHEL (aarch64)
334
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.aarch64.rpm
335
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.aarch64.rpm.sha256
336
- sha256sum -c pythinker-code-0.45.0.aarch64.rpm.sha256
337
- sudo dnf install ./pythinker-code-0.45.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
338
337
  ```
339
338
 
340
339
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -343,8 +342,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
343
342
  **Verify before install:**
344
343
 
345
344
  ```sh
346
- sha256sum -c pythinker-code_0.45.0_amd64.deb.sha256 # Debian/Ubuntu
347
- sha256sum -c pythinker-code-0.45.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
348
347
  ```
349
348
 
350
349
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,14 +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.45.0
53
+ ## 🆕 What's New in 0.47.0
54
54
 
55
- - **Agent-tracing dashboard.** `pythinker dashboard` opens a local web UI for inspecting sessions, wire events, context messages, tool statistics, and usage over time also reachable from the shell via `/reports` or `/dashboard`.
56
- - **Project instructions immune to compaction.** `AGENTS.md` is now delivered as a fresh `<system-reminder>` on every request instead of being baked into the system prompt, so compaction can never summarize it away and the token budget can never truncate it. `pythinker system-prompt` shows the assembled prompt with the reminder below a labeled divider.
57
- - **Accept-edits mode.** `/accept-edits` auto-approves reversible in-workspace file edits while still prompting for shell, destructive, config, and sensitive host-file writes (`.git/hooks`, `.zshrc`, `.ssh`, etc.) never swept into the auto-approve tier.
58
- - **Recover from output-token truncation.** When a turn is cut off by the output-token limit, the model is nudged to continue from where it stopped (up to `loop_control.max_truncation_recoveries` times, default 3) instead of treating a half-finished answer as complete.
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.
59
58
 
60
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.45.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).
61
60
 
62
61
 
63
62
  ---
@@ -147,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
147
146
 
148
147
  | Platform | Recommended install | Artifact source |
149
148
  |---|---|---|
150
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.45.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) |
151
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) |
152
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 |
153
152
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -175,7 +174,7 @@ pythinker # start the interactive TUI
175
174
 
176
175
  ### 🪟 Windows — native installer
177
176
 
178
- `PythinkerSetup-0.45.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
179
178
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
180
179
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
181
180
  the change. **No UAC prompt.**
@@ -186,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
186
185
 
187
186
  # Or manually download the installer + checksum from the Releases page,
188
187
  # verify with Get-FileHash, then run:
189
- .\PythinkerSetup-0.45.0.exe
188
+ .\PythinkerSetup-0.47.0.exe
190
189
 
191
190
  # Open a fresh PowerShell
192
191
  pythinker --version
193
192
  ```
194
193
 
195
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.45.0.exe /ALLUSERS`
194
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.47.0.exe /ALLUSERS`
196
195
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
197
196
 
198
197
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -250,26 +249,26 @@ attached to every GitHub Release.
250
249
 
251
250
  ```sh
252
251
  # Debian / Ubuntu (x86_64)
253
- sudo dpkg -i pythinker-code_0.45.0_amd64.deb
252
+ sudo dpkg -i pythinker-code_0.47.0_amd64.deb
254
253
  sudo apt-get install -f # only if dpkg reports missing deps
255
254
 
256
255
  # Debian / Ubuntu (ARM64)
257
- sudo dpkg -i pythinker-code_0.45.0_arm64.deb
256
+ sudo dpkg -i pythinker-code_0.47.0_arm64.deb
258
257
 
259
258
  # Fedora / RHEL / openSUSE (x86_64)
260
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.x86_64.rpm
261
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.x86_64.rpm.sha256
262
- sha256sum -c pythinker-code-0.45.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
263
262
  # Fedora / RHEL:
264
- sudo dnf install ./pythinker-code-0.45.0.x86_64.rpm
263
+ sudo dnf install ./pythinker-code-0.47.0.x86_64.rpm
265
264
  # openSUSE:
266
- sudo zypper install ./pythinker-code-0.45.0.x86_64.rpm
265
+ sudo zypper install ./pythinker-code-0.47.0.x86_64.rpm
267
266
 
268
267
  # Fedora / RHEL (aarch64)
269
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.aarch64.rpm
270
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.45.0/pythinker-code-0.45.0.aarch64.rpm.sha256
271
- sha256sum -c pythinker-code-0.45.0.aarch64.rpm.sha256
272
- sudo dnf install ./pythinker-code-0.45.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
273
272
  ```
274
273
 
275
274
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -278,8 +277,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
278
277
  **Verify before install:**
279
278
 
280
279
  ```sh
281
- sha256sum -c pythinker-code_0.45.0_amd64.deb.sha256 # Debian/Ubuntu
282
- sha256sum -c pythinker-code-0.45.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
283
282
  ```
284
283
 
285
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.45.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,104 @@ 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
+
108
+ ## 0.46.0 (2026-06-14)
109
+
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.
111
+ - **The welcome banner now keeps the robot mark visible in compact terminals.** Below ~68 columns the robot was dropped (it could not sit beside the welcome copy); it now stacks centered above the copy instead, so the mark stays on screen at any width that can render its Unicode glyphs. ASCII-only terminals are unaffected.
112
+ - **A persistent update notice now sits directly under the prompt input.** When a newer release is available the footer shows a yellow `↑ Update available — vX · /update` line; once a release has been installed in the background it switches to a restart-to-apply message instead of pointing at `/update`, and it clears after you restart onto the new version. The line is suppressed for dismissed versions, disabled auto-update, and source checkouts.
113
+
114
+ 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).
115
+
18
116
  ## 0.45.0 (2026-06-14)
19
117
 
20
118
  - **Agent-tracing dashboard.** Added `pythinker dashboard` — a local web UI for inspecting sessions, wire events, context messages, tool statistics, and usage over time. It is also reachable from the interactive shell via the `/reports` slash command (aliased `/dashboard`).
@@ -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