pythinker-code 0.17.0__tar.gz → 0.18.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 (837) hide show
  1. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/PKG-INFO +40 -43
  2. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/README.md +39 -42
  3. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/CHANGELOG.md +12 -0
  5. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/code_reviewer.yaml +2 -1
  6. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/coder.yaml +12 -2
  7. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/debugger.yaml +12 -5
  8. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/explore.yaml +9 -0
  9. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/implementer.yaml +9 -3
  10. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/plan.yaml +23 -1
  11. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/review.yaml +5 -0
  12. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/security_reviewer.yaml +6 -0
  13. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/system.md +31 -1
  14. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/verifier.yaml +11 -2
  15. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/app.py +11 -3
  16. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/agent_runner.py +14 -1
  17. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/manager.py +42 -2
  18. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/__init__.py +48 -2
  19. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/config.py +81 -25
  20. pythinker_code-0.18.0/src/pythinker_code/scratchpad.py +895 -0
  21. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/agent.py +5 -0
  22. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/approval.py +14 -4
  23. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/pythinkersoul.py +60 -34
  24. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/toolset.py +79 -1
  25. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/config.py +18 -10
  26. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/agent/__init__.py +170 -44
  27. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/agent/description.md +5 -1
  28. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/ask_user/__init__.py +16 -0
  29. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/replace.py +3 -0
  30. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/write.py +3 -0
  31. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/__init__.py +19 -1
  32. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/todo/__init__.py +29 -1
  33. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/__init__.py +4 -1
  34. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/__init__.py +11 -1
  35. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/bash_execution.py +7 -2
  36. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +3 -4
  37. pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/dynamic_border.py +37 -0
  38. pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/key_hints.py +55 -0
  39. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/markdown.py +174 -26
  40. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/settings_list.py +56 -7
  41. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/tool_execution.py +3 -1
  42. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/echo.py +2 -9
  43. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/glyphs.py +9 -1
  44. pythinker_code-0.18.0/src/pythinker_code/ui/shell/mcp_status.py +148 -0
  45. pythinker_code-0.18.0/src/pythinker_code/ui/shell/model_picker.py +114 -0
  46. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/motion.py +72 -23
  47. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/prompt.py +49 -4
  48. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selector.py +101 -14
  49. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/slash.py +20 -1
  50. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +50 -7
  51. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +10 -3
  52. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +30 -11
  53. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +5 -1
  54. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +11 -3
  55. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +5 -1
  56. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +5 -1
  57. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +10 -18
  58. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +5 -1
  59. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +5 -1
  60. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +2 -1
  61. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +6 -1
  62. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +9 -2
  63. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -1
  64. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/__init__.py +6 -0
  65. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +7 -1
  66. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +259 -37
  67. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +4 -1
  68. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +137 -18
  69. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/syntax.py +5 -5
  70. pythinker_code-0.18.0/src/pythinker_code/utils/sleep_inhibitor.py +473 -0
  71. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/_baseUniq-qyLZSOfA.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/_baseUniq-diyiadw5.js +1 -1
  72. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/arc-CYkfKUJw.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/arc-C_-dPtYA.js +1 -1
  73. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Cc3dJmlV.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-pe7jaN72.js +1 -1
  74. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-HSBk6vox.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DvNsLxaI.js +1 -1
  75. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-wRemIQog.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DOutQDwU.js +1 -1
  76. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/channel-BEd858yH.js +1 -0
  77. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-0esCM_vg.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CSkVLnTI.js +1 -1
  78. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-C55bd2_o.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-Sp6O21Fa.js +1 -1
  79. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DJxNZVQC.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-HEkwgVVV.js +1 -1
  80. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CEWPxLfs.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-JBzEF4BM.js +1 -1
  81. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DmhbuRTm.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D7NzL_UD.js +1 -1
  82. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-nrPUkuWR.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CFUUnKRn.js +1 -1
  83. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CzXInrrR.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BFM8Zf86.js +1 -1
  84. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DREZe46B.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BkppE9ae.js +1 -1
  85. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Crr9_YII.js +1 -0
  86. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Crr9_YII.js +1 -0
  87. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/clone-Dfc-F2za.js +1 -0
  88. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DMVWN-ml.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CmR8Cdcu.js +1 -1
  89. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Coir87Qv.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DAm3W4aX.js +1 -1
  90. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/cytoscape.esm-eAWqnCYK.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/cytoscape.esm-y1coXWUc.js +1 -1
  91. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CiTUIg0q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-B0i4dUeh.js +1 -1
  92. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-Cq9GXOjk.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CpwOBk04.js +1 -1
  93. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Eamm6xAa.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BKdKDUAt.js +1 -1
  94. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DA1Yz6Pa.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BWSTCXj5.js +1 -1
  95. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-DzlJ-wwC.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CJeB4CQf.js +1 -1
  96. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-Bz9U20to.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-ChW3Nkg5.js +1 -1
  97. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-fsG79E9p.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-BCYS-5Wi.js +1 -1
  98. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BjchK9W1.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CibT-GPx.js +1 -1
  99. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/graph-DbF6cZU0.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/graph-Bg8wdmyQ.js +1 -1
  100. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-BgIGGFpA.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-C-9Nx5Zv.js +1 -1
  101. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-BLAcYwJO.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-Crd7puVX.js +1 -1
  102. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-Brd7Qj46.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-PSmqu2sC.js +2 -2
  103. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CYSDBUZQ.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BZCKIRhX.js +1 -1
  104. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BeF28JOm.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BIv2-5-D.js +1 -1
  105. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-BVAC2O5Q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-BbXFbER0.js +1 -1
  106. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/layout-DNSNr4If.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/layout-Zmsvl1hy.js +1 -1
  107. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/linear-HQWQZMSq.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/linear-BV_H68rk.js +1 -1
  108. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BeS6uII_.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DVprBX-j.js +7 -7
  109. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mermaid.core-CsiBWAvS.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mermaid.core-CR7QF1E3.js +5 -5
  110. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/min-z2ooYt5Q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/min-Doa9BVeR.js +1 -1
  111. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BrkkNtDO.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DNQnYfPv.js +1 -1
  112. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-C0odTEkg.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DVqIhUw6.js +1 -1
  113. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Daco3FUa.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-BuGgJuP-.js +1 -1
  114. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-vOrTEG8b.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DCQLUIxL.js +1 -1
  115. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BVExYdTG.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CSqLQRPC.js +1 -1
  116. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BkPzuwcM.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-B9es9563.js +1 -1
  117. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-Bontz6tD.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-D6uJ4ieP.js +1 -1
  118. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-KTWgI9rj.js +1 -0
  119. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CxfiYDXf.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-B1yc8-Ia.js +1 -1
  120. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-B-wzCRqq.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-_HhSkYE5.js +1 -1
  121. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DIGOnUa7.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-BUOOjSUz.js +1 -1
  122. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/index.html +1 -1
  123. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/install.ps1 +1 -1
  124. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/install.sh +1 -1
  125. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/types.py +48 -0
  126. pythinker_code-0.17.0/src/pythinker_code/ui/shell/components/key_hints.py +0 -25
  127. pythinker_code-0.17.0/src/pythinker_code/ui/shell/mcp_status.py +0 -121
  128. pythinker_code-0.17.0/src/pythinker_code/ui/shell/model_picker.py +0 -319
  129. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/channel-B7CcdrQR.js +0 -1
  130. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-1oL3irp2.js +0 -1
  131. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-1oL3irp2.js +0 -1
  132. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/clone-aTWLJUtw.js +0 -1
  133. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-vD5xTSoN.js +0 -1
  134. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/LICENSE +0 -0
  135. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/NOTICE +0 -0
  136. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/__init__.py +0 -0
  137. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/__main__.py +0 -0
  138. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  139. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/__init__.py +0 -0
  140. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/convert.py +0 -0
  141. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/host.py +0 -0
  142. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/mcp.py +0 -0
  143. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/server.py +0 -0
  144. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/session.py +0 -0
  145. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/tools.py +0 -0
  146. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/types.py +0 -0
  147. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/version.py +0 -0
  148. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  149. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  150. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agentspec.py +0 -0
  151. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  152. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  153. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  154. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/__init__.py +0 -0
  155. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  156. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/deepseek.py +0 -0
  157. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  158. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  159. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/minimax.py +0 -0
  160. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/oauth.py +0 -0
  161. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/ollama.py +0 -0
  162. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/openai.py +0 -0
  163. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  164. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/openrouter.py +0 -0
  165. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/platforms.py +0 -0
  166. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/__init__.py +0 -0
  167. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/ids.py +0 -0
  168. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/models.py +0 -0
  169. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/store.py +0 -0
  170. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/summary.py +0 -0
  171. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/worker.py +0 -0
  172. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/__main__.py +0 -0
  173. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  174. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/debug.py +0 -0
  175. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/export.py +0 -0
  176. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/info.py +0 -0
  177. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/mcp.py +0 -0
  178. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/plugin.py +0 -0
  179. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/review.py +0 -0
  180. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/secscan.py +0 -0
  181. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/security_scan.py +0 -0
  182. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/skill.py +0 -0
  183. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/toad.py +0 -0
  184. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/update.py +0 -0
  185. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/vis.py +0 -0
  186. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/web.py +0 -0
  187. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/constant.py +0 -0
  188. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/events.py +0 -0
  189. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/exception.py +0 -0
  190. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/execution_profiles.py +0 -0
  191. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/extensions.py +0 -0
  192. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/file_restore.py +0 -0
  193. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/__init__.py +0 -0
  194. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/config.py +0 -0
  195. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/engine.py +0 -0
  196. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/events.py +0 -0
  197. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/runner.py +0 -0
  198. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/llm.py +0 -0
  199. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/metadata.py +0 -0
  200. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/native.py +0 -0
  201. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/__init__.py +0 -0
  202. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/llm.py +0 -0
  203. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/manager.py +0 -0
  204. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/models.py +0 -0
  205. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/notifier.py +0 -0
  206. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/store.py +0 -0
  207. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/wire.py +0 -0
  208. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/__init__.py +0 -0
  209. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/manager.py +0 -0
  210. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/tool.py +0 -0
  211. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompt_templates.py +0 -0
  212. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/__init__.py +0 -0
  213. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/compact.md +0 -0
  214. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/init.md +0 -0
  215. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/py.typed +0 -0
  216. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/session.py +0 -0
  217. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/session_fork.py +0 -0
  218. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/session_state.py +0 -0
  219. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/share.py +0 -0
  220. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/__init__.py +0 -0
  221. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  222. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  223. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  224. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/lockfile.py +0 -0
  225. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  226. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  227. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  228. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  229. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  230. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  231. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  232. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  233. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  234. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  235. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  236. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  237. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  238. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  239. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/__init__.py +0 -0
  240. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/btw.py +0 -0
  241. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/compaction.py +0 -0
  242. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  243. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/context.py +0 -0
  244. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  245. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  246. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  247. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  248. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  249. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/message.py +0 -0
  250. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/permission.py +0 -0
  251. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/slash.py +0 -0
  252. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/__init__.py +0 -0
  253. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/builder.py +0 -0
  254. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/core.py +0 -0
  255. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/discovery.py +0 -0
  256. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/git_context.py +0 -0
  257. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/models.py +0 -0
  258. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/output.py +0 -0
  259. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/registry.py +0 -0
  260. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/runner.py +0 -0
  261. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/store.py +0 -0
  262. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  263. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/crash.py +0 -0
  264. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/errors.py +0 -0
  265. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  266. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/otel.py +0 -0
  267. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  268. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/sink.py +0 -0
  269. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  270. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/__init__.py +0 -0
  271. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  272. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  273. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  274. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/input.md +0 -0
  275. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/list.md +0 -0
  276. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/output.md +0 -0
  277. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/stop.md +0 -0
  278. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/display.py +0 -0
  279. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  280. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  281. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  282. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/glob.md +0 -0
  283. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/glob.py +0 -0
  284. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/grep.md +0 -0
  285. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  286. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  287. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read.md +0 -0
  288. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read.py +0 -0
  289. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  290. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  291. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/replace.md +0 -0
  292. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/utils.py +0 -0
  293. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/write.md +0 -0
  294. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  295. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/description.md +0 -0
  296. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  297. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  298. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  299. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  300. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  301. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  302. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  303. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/skill/description.md +0 -0
  304. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/test.py +0 -0
  305. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  306. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/think/think.md +0 -0
  307. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  308. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/utils.py +0 -0
  309. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  310. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  311. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  312. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/search.md +0 -0
  313. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/search.py +0 -0
  314. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/__init__.py +0 -0
  315. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  316. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  317. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  318. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  319. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  320. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  321. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  322. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  323. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  324. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  325. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/console.py +0 -0
  326. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  327. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  328. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  329. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  330. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  331. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  332. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  333. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  334. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  335. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  336. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  337. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  338. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  339. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  340. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  341. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  342. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  343. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  344. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  345. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  346. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  347. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  348. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  349. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  350. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  351. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  352. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/update.py +0 -0
  353. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  354. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  355. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  356. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  357. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  358. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  359. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  360. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  361. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  362. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  363. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  364. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  365. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  366. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  367. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  368. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  369. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  370. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  371. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  372. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  373. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/theme.py +0 -0
  374. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/tui_config.py +0 -0
  375. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  376. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/__init__.py +0 -0
  377. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  378. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  379. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/broadcast.py +0 -0
  380. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/changelog.py +0 -0
  381. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/clipboard.py +0 -0
  382. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/datetime.py +0 -0
  383. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/diff.py +0 -0
  384. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/editor.py +0 -0
  385. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/environment.py +0 -0
  386. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/envvar.py +0 -0
  387. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/export.py +0 -0
  388. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/file_filter.py +0 -0
  389. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  390. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/io.py +0 -0
  391. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/logging.py +0 -0
  392. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/media_tags.py +0 -0
  393. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/message.py +0 -0
  394. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/path.py +0 -0
  395. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/proctitle.py +0 -0
  396. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/proxy.py +0 -0
  397. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  398. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  399. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  400. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  401. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  402. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  403. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  404. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/sensitive.py +0 -0
  405. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/server.py +0 -0
  406. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/signals.py +0 -0
  407. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  408. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/string.py +0 -0
  409. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  410. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/term.py +0 -0
  411. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/typing.py +0 -0
  412. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/__init__.py +0 -0
  413. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  414. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  415. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  416. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/system.py +0 -0
  417. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/app.py +0 -0
  418. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  419. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  420. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  421. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  422. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  423. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  424. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  425. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  426. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  427. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  428. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/index.html +0 -0
  429. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/__init__.py +0 -0
  430. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/__init__.py +0 -0
  431. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/config.py +0 -0
  432. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/open_in.py +0 -0
  433. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/sessions.py +0 -0
  434. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/app.py +0 -0
  435. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/auth.py +0 -0
  436. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/models.py +0 -0
  437. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  438. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/messages.py +0 -0
  439. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/process.py +0 -0
  440. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/worker.py +0 -0
  441. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/_headers +0 -0
  442. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  443. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  444. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  445. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  446. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  447. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  448. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  449. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  450. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  451. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  452. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  453. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  454. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  455. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  456. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  457. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  458. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  459. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  460. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  461. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  462. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  463. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  464. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  465. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  466. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  467. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  468. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  469. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  470. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  471. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  472. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  473. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  474. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  475. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  476. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  477. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  478. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  479. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  480. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  481. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  482. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  483. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  484. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  485. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  486. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  487. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  488. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  489. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  490. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  491. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  492. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  493. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  494. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  495. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  496. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  497. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  498. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  499. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  500. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  501. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  502. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  503. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  504. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  505. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  506. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  507. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  508. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  509. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  510. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  511. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  512. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  513. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  514. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  515. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  516. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  517. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  518. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  519. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  520. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  521. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  522. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  523. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  524. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  525. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  526. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  527. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  528. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  529. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  530. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  531. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  532. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  533. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  534. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  535. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  536. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  537. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  538. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  539. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  540. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  541. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  542. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  543. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  544. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  545. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  546. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  547. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  548. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  549. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  550. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  551. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  552. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  553. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  554. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  555. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  556. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  557. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  558. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  559. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  560. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  561. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  562. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  563. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  564. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  565. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  566. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  567. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  568. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  569. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  570. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  571. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  572. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  573. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  574. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  575. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  576. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  577. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  578. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  579. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  580. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  581. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  582. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  583. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  584. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  585. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  586. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  587. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  588. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  589. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  590. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  591. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  592. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  593. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  594. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  595. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  596. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  597. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  598. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  599. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  600. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  601. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  602. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  603. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  604. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  605. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  606. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  607. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  608. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  609. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  610. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  611. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  612. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  613. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  614. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  615. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  616. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  617. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  618. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  619. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  620. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  621. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  622. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  623. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  624. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  625. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  626. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  627. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  628. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  629. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  630. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  631. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  632. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  633. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  634. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  635. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  636. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  637. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  638. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  639. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  640. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  641. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  642. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  643. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  644. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  645. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  646. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  647. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  648. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  649. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  650. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  651. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  652. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  653. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  654. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  655. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  656. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  657. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  658. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  659. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  660. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  661. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  662. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  663. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  664. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  665. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  666. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  667. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  668. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  669. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  670. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  671. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  672. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  673. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  674. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  675. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  676. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  677. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  678. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  679. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  680. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  681. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  682. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  683. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  684. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  685. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  686. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  687. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  688. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  689. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  690. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  691. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  692. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  693. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  694. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  695. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  696. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  697. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  698. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  699. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  700. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  701. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  702. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  703. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  704. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  705. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  706. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  707. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  708. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  709. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  710. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  711. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  712. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  713. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  714. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  715. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  716. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  717. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  718. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  719. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  720. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  721. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  722. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  723. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  724. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  725. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  726. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  727. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  728. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  729. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  730. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  731. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  732. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  733. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  734. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  735. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  736. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  737. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  738. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  739. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  740. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  741. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  742. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  743. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  744. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  745. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  746. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  747. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  748. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  749. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  750. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  751. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  752. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  753. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  754. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  755. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  756. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  757. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  758. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  759. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  760. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  761. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  762. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  763. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  764. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  765. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  766. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  767. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  768. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  769. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  770. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  771. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  772. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  773. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  774. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  775. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  776. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  777. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  778. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  779. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  780. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  781. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  782. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  783. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  784. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  785. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  786. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  787. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  788. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  789. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  790. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  791. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  792. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  793. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  794. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  795. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  796. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  797. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  798. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  799. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  800. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  801. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  802. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  803. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  804. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  805. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  806. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  807. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  808. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  809. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  810. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  811. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  812. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  813. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  814. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  815. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  816. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  817. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  818. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  819. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  820. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  821. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  822. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  823. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  824. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  825. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  826. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  827. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  828. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/logo.png +0 -0
  829. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/store/__init__.py +0 -0
  830. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/store/sessions.py +0 -0
  831. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/__init__.py +0 -0
  832. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/file.py +0 -0
  833. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  834. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/protocol.py +0 -0
  835. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/root_hub.py +0 -0
  836. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/serde.py +0 -0
  837. {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.17.0
3
+ Version: 0.18.0
4
4
  Summary: Pythinker Code is your next CLI agent.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Mohamed Elkholy
@@ -115,15 +115,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.17.0
118
+ ## 🆕 What's New in 0.18.0
119
119
 
120
- - **Sharper compaction continuity.** PreCompact now carries custom instructions, restores skill and hook context after compaction, triggers SessionStart after restore, and preserves the `Conversation compacted.` handoff so long sessions resume cleanly.
121
- - **Better subagent orchestration.** Subagent specs merge inherited subagent maps, launches preserve parent-agent IDs for spawn-tree tracking, RunAgents fingerprints include agent names, and markdown agent discovery warns on unknown models instead of silently falling back.
122
- - **Polished terminal workflow.** The shell adopts the robot-brand palette, compact transcript/agent/file-mention menus, pinned live todo activity, calmer tool output, and safer auto-backgrounding for long shell commands.
123
- - **Release and installer hardening.** Interactive sessions show a blocking pre-start update prompt, update exits wait for acknowledgement, Homebrew publish retries package installs, and native installers gain a friendlier animated path with Windows User PATH automation.
124
- - **Provider compatibility refresh.** Anthropic SDK support is updated for 0.101 tool-result block types so direct Anthropic sessions continue to stream tool output correctly.
120
+ - **Live subagent activity streaming.** Subagent tool calls now stream live into the transcript, with safe pending headers for in-flight tool calls, new transcript progress events, and a unified shimmer animation across active-work labels so long-running exploration stays legible.
121
+ - **Smarter delegation and orchestration.** A Context-First Orchestration Protocol guides the default agent, specialist subagents receive prompt packets for single-objective delegation plus evidence and verification gates, and overflow RunAgents children are deferred instead of hard-failing.
122
+ - **Calmer, more resilient TUI.** In-flight and singular Ask payloads no longer flash an invalid badge, MCP startup status is cleaner, and shell rendering and MCP guidance are refined.
123
+ - **Sturdier configuration handling.** Incompatible legacy JSON config is now preserved instead of being silently reset to defaults.
124
+ - **Security and shell hardening.** The security scan and shell execution paths were hardened against unexpected input.
125
125
 
126
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.17.0`, or use the native installer for your platform from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
126
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.18.0`, or use the native installer for your platform from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
127
127
 
128
128
 
129
129
  ---
@@ -213,7 +213,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
213
213
 
214
214
  | Platform | Recommended install | Artifact source |
215
215
  |---|---|---|
216
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.17.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
216
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.18.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
217
217
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
218
218
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | auto-published Homebrew tap |
219
219
  | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
@@ -238,7 +238,7 @@ pythinker # start the interactive TUI
238
238
 
239
239
  ### 🪟 Windows — native installer
240
240
 
241
- `PythinkerSetup-0.17.0.exe` is a signed* Inno Setup wizard. Installs per-user
241
+ `PythinkerSetup-0.18.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
242
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
243
243
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
244
244
  the change. **No UAC prompt.**
@@ -249,13 +249,13 @@ irm https://pythinker.com/install.ps1 | iex
249
249
 
250
250
  # Or manually download the installer + checksum from the Releases page,
251
251
  # verify with Get-FileHash, then run:
252
- .\PythinkerSetup-0.17.0.exe
252
+ .\PythinkerSetup-0.18.0.exe
253
253
 
254
254
  # Open a fresh PowerShell
255
255
  pythinker --version
256
256
  ```
257
257
 
258
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.17.0.exe /ALLUSERS`
258
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.18.0.exe /ALLUSERS`
259
259
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
260
260
 
261
261
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -305,26 +305,26 @@ attached to every GitHub Release.
305
305
 
306
306
  ```sh
307
307
  # Debian / Ubuntu (x86_64)
308
- sudo dpkg -i pythinker-code_0.17.0_amd64.deb
308
+ sudo dpkg -i pythinker-code_0.18.0_amd64.deb
309
309
  sudo apt-get install -f # only if dpkg reports missing deps
310
310
 
311
311
  # Debian / Ubuntu (ARM64)
312
- sudo dpkg -i pythinker-code_0.17.0_arm64.deb
312
+ sudo dpkg -i pythinker-code_0.18.0_arm64.deb
313
313
 
314
314
  # Fedora / RHEL / openSUSE (x86_64)
315
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm
316
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm.sha256
317
- sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256
315
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm
316
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm.sha256
317
+ sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256
318
318
  # Fedora / RHEL:
319
- sudo dnf install ./pythinker-code-0.17.0.x86_64.rpm
319
+ sudo dnf install ./pythinker-code-0.18.0.x86_64.rpm
320
320
  # openSUSE:
321
- sudo zypper install ./pythinker-code-0.17.0.x86_64.rpm
321
+ sudo zypper install ./pythinker-code-0.18.0.x86_64.rpm
322
322
 
323
323
  # Fedora / RHEL (aarch64)
324
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm
325
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm.sha256
326
- sha256sum -c pythinker-code-0.17.0.aarch64.rpm.sha256
327
- sudo dnf install ./pythinker-code-0.17.0.aarch64.rpm
324
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm
325
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm.sha256
326
+ sha256sum -c pythinker-code-0.18.0.aarch64.rpm.sha256
327
+ sudo dnf install ./pythinker-code-0.18.0.aarch64.rpm
328
328
  ```
329
329
 
330
330
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -333,8 +333,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
333
333
  **Verify before install:**
334
334
 
335
335
  ```sh
336
- sha256sum -c pythinker-code_0.17.0_amd64.deb.sha256 # Debian/Ubuntu
337
- sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256 # Fedora/RHEL
336
+ sha256sum -c pythinker-code_0.18.0_amd64.deb.sha256 # Debian/Ubuntu
337
+ sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256 # Fedora/RHEL
338
338
  ```
339
339
 
340
340
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -364,7 +364,7 @@ at `~/.local/bin/pythinker`.
364
364
  curl -fsSL https://pythinker.com/install.sh | bash
365
365
 
366
366
  # Pin a specific version
367
- curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.17.0
367
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.18.0
368
368
 
369
369
  # Custom prefix (defaults to $HOME/.local)
370
370
  curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -385,9 +385,9 @@ Supported targets:
385
385
 
386
386
  | `uname -s / -m` | Tarball asset |
387
387
  |---|---|
388
- | Linux / x86_64 | `pythinker-0.17.0-x86_64-unknown-linux-gnu.tar.gz` |
389
- | Linux / aarch64 | `pythinker-0.17.0-aarch64-unknown-linux-gnu.tar.gz` |
390
- | Darwin / arm64 | `pythinker-0.17.0-aarch64-apple-darwin.tar.gz` |
388
+ | Linux / x86_64 | `pythinker-0.18.0-x86_64-unknown-linux-gnu.tar.gz` |
389
+ | Linux / aarch64 | `pythinker-0.18.0-aarch64-unknown-linux-gnu.tar.gz` |
390
+ | Darwin / arm64 | `pythinker-0.18.0-aarch64-apple-darwin.tar.gz` |
391
391
 
392
392
  The script prints PATH guidance if `~/.local/bin` isn't already on your
393
393
  `$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
@@ -617,14 +617,18 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
617
617
  ### 🛠️ Manage persistent MCP servers
618
618
 
619
619
  ```sh
620
+ # 📚 Context7 stdio server (Codex-style: NAME -- COMMAND)
621
+ pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
622
+ # Added MCP server 'context7' to ~/.pythinker/mcp.json
623
+
620
624
  # 🌐 Streamable HTTP server with API key
621
- pythinker mcp add --transport http context7 https://mcp.context7.com/mcp \
622
- --header "CONTEXT7_API_KEY: ctx7sk-your-key"
625
+ pythinker mcp add --transport http docs https://example.com/mcp \
626
+ --header "API_KEY: your-key"
623
627
 
624
628
  # 🔐 Streamable HTTP server with OAuth
625
629
  pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
626
630
 
627
- # 💻 stdio server
631
+ # 💻 stdio server with explicit transport
628
632
  pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
629
633
 
630
634
  # 📋 List, authorize, test, and remove
@@ -714,16 +718,9 @@ file paths, or any user-identifying data. Two channels:
714
718
  - Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
715
719
  - Tool arguments (e.g. what file you read, what command you ran)
716
720
 
717
- ### Opting in or forcing off
718
-
719
- Telemetry is off by default. To enable it for a process:
720
-
721
- ```sh
722
- export PYTHINKER_ENABLE_TELEMETRY=1
723
- pythinker
724
- ```
721
+ ### Turning it off
725
722
 
726
- To force telemetry off even if another setting enabled it:
723
+ Telemetry is on by default. To turn it off:
727
724
 
728
725
  ```sh
729
726
  # 1. Per-invocation CLI flag
@@ -753,8 +750,8 @@ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
753
750
  export PYTHINKER_OTEL_TOKEN="<your bearer token>"
754
751
  ```
755
752
 
756
- The defaults point at infrastructure operated by the pythinker maintainers;
757
- set `PYTHINKER_ENABLE_TELEMETRY=1` to use them.
753
+ The defaults point at infrastructure operated by the pythinker maintainers and
754
+ are used automatically unless you turn telemetry off.
758
755
 
759
756
  ---
760
757
 
@@ -50,15 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.17.0
53
+ ## 🆕 What's New in 0.18.0
54
54
 
55
- - **Sharper compaction continuity.** PreCompact now carries custom instructions, restores skill and hook context after compaction, triggers SessionStart after restore, and preserves the `Conversation compacted.` handoff so long sessions resume cleanly.
56
- - **Better subagent orchestration.** Subagent specs merge inherited subagent maps, launches preserve parent-agent IDs for spawn-tree tracking, RunAgents fingerprints include agent names, and markdown agent discovery warns on unknown models instead of silently falling back.
57
- - **Polished terminal workflow.** The shell adopts the robot-brand palette, compact transcript/agent/file-mention menus, pinned live todo activity, calmer tool output, and safer auto-backgrounding for long shell commands.
58
- - **Release and installer hardening.** Interactive sessions show a blocking pre-start update prompt, update exits wait for acknowledgement, Homebrew publish retries package installs, and native installers gain a friendlier animated path with Windows User PATH automation.
59
- - **Provider compatibility refresh.** Anthropic SDK support is updated for 0.101 tool-result block types so direct Anthropic sessions continue to stream tool output correctly.
55
+ - **Live subagent activity streaming.** Subagent tool calls now stream live into the transcript, with safe pending headers for in-flight tool calls, new transcript progress events, and a unified shimmer animation across active-work labels so long-running exploration stays legible.
56
+ - **Smarter delegation and orchestration.** A Context-First Orchestration Protocol guides the default agent, specialist subagents receive prompt packets for single-objective delegation plus evidence and verification gates, and overflow RunAgents children are deferred instead of hard-failing.
57
+ - **Calmer, more resilient TUI.** In-flight and singular Ask payloads no longer flash an invalid badge, MCP startup status is cleaner, and shell rendering and MCP guidance are refined.
58
+ - **Sturdier configuration handling.** Incompatible legacy JSON config is now preserved instead of being silently reset to defaults.
59
+ - **Security and shell hardening.** The security scan and shell execution paths were hardened against unexpected input.
60
60
 
61
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.17.0`, or use the native installer for your platform from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
61
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.18.0`, or use the native installer for your platform from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
62
62
 
63
63
 
64
64
  ---
@@ -148,7 +148,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
148
148
 
149
149
  | Platform | Recommended install | Artifact source |
150
150
  |---|---|---|
151
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.17.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
151
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.18.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
152
152
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
153
153
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | auto-published Homebrew tap |
154
154
  | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
@@ -173,7 +173,7 @@ pythinker # start the interactive TUI
173
173
 
174
174
  ### 🪟 Windows — native installer
175
175
 
176
- `PythinkerSetup-0.17.0.exe` is a signed* Inno Setup wizard. Installs per-user
176
+ `PythinkerSetup-0.18.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
177
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
178
178
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
179
179
  the change. **No UAC prompt.**
@@ -184,13 +184,13 @@ irm https://pythinker.com/install.ps1 | iex
184
184
 
185
185
  # Or manually download the installer + checksum from the Releases page,
186
186
  # verify with Get-FileHash, then run:
187
- .\PythinkerSetup-0.17.0.exe
187
+ .\PythinkerSetup-0.18.0.exe
188
188
 
189
189
  # Open a fresh PowerShell
190
190
  pythinker --version
191
191
  ```
192
192
 
193
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.17.0.exe /ALLUSERS`
193
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.18.0.exe /ALLUSERS`
194
194
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
195
195
 
196
196
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -240,26 +240,26 @@ attached to every GitHub Release.
240
240
 
241
241
  ```sh
242
242
  # Debian / Ubuntu (x86_64)
243
- sudo dpkg -i pythinker-code_0.17.0_amd64.deb
243
+ sudo dpkg -i pythinker-code_0.18.0_amd64.deb
244
244
  sudo apt-get install -f # only if dpkg reports missing deps
245
245
 
246
246
  # Debian / Ubuntu (ARM64)
247
- sudo dpkg -i pythinker-code_0.17.0_arm64.deb
247
+ sudo dpkg -i pythinker-code_0.18.0_arm64.deb
248
248
 
249
249
  # Fedora / RHEL / openSUSE (x86_64)
250
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm
251
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm.sha256
252
- sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256
250
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm
251
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm.sha256
252
+ sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256
253
253
  # Fedora / RHEL:
254
- sudo dnf install ./pythinker-code-0.17.0.x86_64.rpm
254
+ sudo dnf install ./pythinker-code-0.18.0.x86_64.rpm
255
255
  # openSUSE:
256
- sudo zypper install ./pythinker-code-0.17.0.x86_64.rpm
256
+ sudo zypper install ./pythinker-code-0.18.0.x86_64.rpm
257
257
 
258
258
  # Fedora / RHEL (aarch64)
259
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm
260
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm.sha256
261
- sha256sum -c pythinker-code-0.17.0.aarch64.rpm.sha256
262
- sudo dnf install ./pythinker-code-0.17.0.aarch64.rpm
259
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm
260
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm.sha256
261
+ sha256sum -c pythinker-code-0.18.0.aarch64.rpm.sha256
262
+ sudo dnf install ./pythinker-code-0.18.0.aarch64.rpm
263
263
  ```
264
264
 
265
265
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -268,8 +268,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
268
268
  **Verify before install:**
269
269
 
270
270
  ```sh
271
- sha256sum -c pythinker-code_0.17.0_amd64.deb.sha256 # Debian/Ubuntu
272
- sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256 # Fedora/RHEL
271
+ sha256sum -c pythinker-code_0.18.0_amd64.deb.sha256 # Debian/Ubuntu
272
+ sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256 # Fedora/RHEL
273
273
  ```
274
274
 
275
275
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -299,7 +299,7 @@ at `~/.local/bin/pythinker`.
299
299
  curl -fsSL https://pythinker.com/install.sh | bash
300
300
 
301
301
  # Pin a specific version
302
- curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.17.0
302
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.18.0
303
303
 
304
304
  # Custom prefix (defaults to $HOME/.local)
305
305
  curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -320,9 +320,9 @@ Supported targets:
320
320
 
321
321
  | `uname -s / -m` | Tarball asset |
322
322
  |---|---|
323
- | Linux / x86_64 | `pythinker-0.17.0-x86_64-unknown-linux-gnu.tar.gz` |
324
- | Linux / aarch64 | `pythinker-0.17.0-aarch64-unknown-linux-gnu.tar.gz` |
325
- | Darwin / arm64 | `pythinker-0.17.0-aarch64-apple-darwin.tar.gz` |
323
+ | Linux / x86_64 | `pythinker-0.18.0-x86_64-unknown-linux-gnu.tar.gz` |
324
+ | Linux / aarch64 | `pythinker-0.18.0-aarch64-unknown-linux-gnu.tar.gz` |
325
+ | Darwin / arm64 | `pythinker-0.18.0-aarch64-apple-darwin.tar.gz` |
326
326
 
327
327
  The script prints PATH guidance if `~/.local/bin` isn't already on your
328
328
  `$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
@@ -552,14 +552,18 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
552
552
  ### 🛠️ Manage persistent MCP servers
553
553
 
554
554
  ```sh
555
+ # 📚 Context7 stdio server (Codex-style: NAME -- COMMAND)
556
+ pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
557
+ # Added MCP server 'context7' to ~/.pythinker/mcp.json
558
+
555
559
  # 🌐 Streamable HTTP server with API key
556
- pythinker mcp add --transport http context7 https://mcp.context7.com/mcp \
557
- --header "CONTEXT7_API_KEY: ctx7sk-your-key"
560
+ pythinker mcp add --transport http docs https://example.com/mcp \
561
+ --header "API_KEY: your-key"
558
562
 
559
563
  # 🔐 Streamable HTTP server with OAuth
560
564
  pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
561
565
 
562
- # 💻 stdio server
566
+ # 💻 stdio server with explicit transport
563
567
  pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
564
568
 
565
569
  # 📋 List, authorize, test, and remove
@@ -649,16 +653,9 @@ file paths, or any user-identifying data. Two channels:
649
653
  - Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
650
654
  - Tool arguments (e.g. what file you read, what command you ran)
651
655
 
652
- ### Opting in or forcing off
653
-
654
- Telemetry is off by default. To enable it for a process:
655
-
656
- ```sh
657
- export PYTHINKER_ENABLE_TELEMETRY=1
658
- pythinker
659
- ```
656
+ ### Turning it off
660
657
 
661
- To force telemetry off even if another setting enabled it:
658
+ Telemetry is on by default. To turn it off:
662
659
 
663
660
  ```sh
664
661
  # 1. Per-invocation CLI flag
@@ -688,8 +685,8 @@ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
688
685
  export PYTHINKER_OTEL_TOKEN="<your bearer token>"
689
686
  ```
690
687
 
691
- The defaults point at infrastructure operated by the pythinker maintainers;
692
- set `PYTHINKER_ENABLE_TELEMETRY=1` to use them.
688
+ The defaults point at infrastructure operated by the pythinker maintainers and
689
+ are used automatically unless you turn telemetry off.
693
690
 
694
691
  ---
695
692
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.17.0"
3
+ version = "0.18.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,18 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.18.0 (2026-05-27)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Live subagent activity streaming.** Subagent tool calls now stream live into the transcript, with safe pending headers for in-flight tool calls, new transcript progress events, and a unified shimmer animation across active-work labels so long-running exploration stays legible.
23
+ - **Smarter delegation and orchestration.** A Context-First Orchestration Protocol guides the default agent, specialist subagents receive prompt packets for single-objective delegation plus evidence and verification gates, and overflow RunAgents children are deferred instead of hard-failing.
24
+ - **Calmer, more resilient TUI.** In-flight and singular Ask payloads no longer flash an invalid badge, MCP startup status is cleaner, and shell rendering and MCP guidance are refined.
25
+ - **Sturdier configuration handling.** Incompatible legacy JSON config is now preserved instead of being silently reset to defaults.
26
+ - **Security and shell hardening.** The security scan and shell execution paths were hardened against unexpected input.
27
+
28
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.18.0`, or use the native installer for your OS (see the README install table).
29
+
18
30
  ## 0.17.0 (2026-05-25)
19
31
 
20
32
  ### What changed in this release
@@ -20,8 +20,9 @@ agent:
20
20
 
21
21
  Review discipline:
22
22
  - If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
23
+ - Build a review context packet: base ref/diff scope, changed behavior, likely tests, user-visible impact, and validation evidence.
23
24
  - Flag only issues introduced or made reachable by the diff.
24
- - Prefer no finding over vague speculation.
25
+ - Prefer no finding over vague speculation. Every finding must cite concrete evidence and a failure mode.
25
26
  - Do not request tests unless they cover a distinct behavior or risk introduced by the change.
26
27
  - Treat V0 robustness suggestions as future work unless they risk correctness, security, data loss, or persistent hangs.
27
28
  - For user-visible UI/behavior changes, check whether screenshots, GIFs, videos, or equivalent visual evidence are present; if absent, request that evidence as a blocking review concern.
@@ -7,13 +7,23 @@ agent:
7
7
 
8
8
  Stay tightly scoped to exactly what the parent assigned. Do not expand into adjacent cleanup or refactors. If you discover related work, surface it under RISKS or BLOCKERS rather than doing it.
9
9
 
10
- Before editing, read the target files and confirm the line ranges/patterns you will change. Prefer the minimum edit that satisfies the brief. After edits, run the smallest relevant verification command available and report the result.
10
+ Context gate before editing:
11
+ - Confirm the parent provided a clear goal, scope, constraints, and acceptance criteria. If not, inspect the code enough to infer them or report BLOCKERS.
12
+ - Read target files, nearby patterns, and relevant tests before writing. Do not edit code you cannot explain.
13
+ - Prefer the minimum implementation that satisfies the brief; no speculative abstractions or broad formatting churn.
14
+
15
+ Implementation method:
16
+ - Before editing, read the target files and confirm the line ranges/patterns you will change.
17
+ - Prefer StrReplaceFile for narrow changes; use WriteFile only for new files or intentional full rewrites.
18
+ - Add or update tests when the brief requires behavior changes and the project has relevant tests.
19
+ - After edits, inspect the diff/changed files for scope creep, TODOs/placeholders, import mistakes, and logic mismatches.
20
+ - Run the smallest relevant verification command available and report the result. If verification cannot run, explain the blocker.
11
21
 
12
22
  Final response contract:
13
23
  ### SUMMARY
14
24
  One paragraph with what you did and the outcome.
15
25
  ### EVIDENCE
16
- Bullet list of concrete file paths, command results, or observed errors that support the outcome.
26
+ Bullet list of concrete file paths, command results, diff inspection, or observed errors that support the outcome.
17
27
  ### CHANGES
18
28
  Bullet list of every file you modified, or `None.` if read-only.
19
29
  ### RISKS
@@ -5,24 +5,31 @@ agent:
5
5
  ROLE_ADDITIONAL: |
6
6
  You are now running as a subagent. All `user` messages are sent by the main agent. The main agent cannot see your context, only your last message. Treat the parent agent as your caller. Do not ask the end user questions; surface ambiguity in your final summary.
7
7
 
8
- You are a root-cause debugger. Your job is to run `pythinker debug failure <log-file>` when a failure log is available, or request the parent provide the log path/command evidence.
8
+ You are a root-cause debugger. Your job is to establish reproduction evidence, isolate the likely cause, and recommend the smallest next action before anyone edits code.
9
+
10
+ Reproduction protocol:
11
+ - If a failure log is available, run `pythinker debug failure <log-file> --format json` and translate the result for the parent.
12
+ - If no log file is available but a failing command is provided, run the command only when it is safe and bounded; capture stdout/stderr and exit code.
13
+ - If neither log nor command evidence is available, do not guess. Request the parent provide the missing log path, failing command, environment, or reproduction steps under BLOCKERS.
9
14
 
10
15
  Operating rules:
11
16
  - If `.pythinker/review-guidelines.md` exists, read it before judging failure severity or fix priority.
12
17
  - Read-only by convention. Do not edit source files.
13
- - Focus on reproduction evidence, changed-file correlation, likely root cause, and minimal next action.
18
+ - Observe first: stack traces, assertions, recent diffs, environment, and reproduction steps.
19
+ - Correlate failures with changed files, callers/callees, config, tests, and recent assumptions.
20
+ - State confidence. Separate confirmed root cause from plausible hypotheses.
14
21
  - Check graceful degradation, observability/logging, recovery behavior, structured result/status correctness, approval/policy mismatches, and user-facing string regressions when they explain or worsen the failure.
15
- - Default to `--format json` and translate the result into the structured response block below.
22
+ - Recommend the minimal next action and the verification that should prove the fix.
16
23
 
17
24
  Final response contract:
18
25
  ### SUMMARY
19
26
  One paragraph: likely root cause, confidence, and first recommended action.
20
27
  ### EVIDENCE
21
- Bullet list of log/stack/diff evidence with file:line when available.
28
+ Bullet list of log/stack/diff/reproduction evidence with file:line when available.
22
29
  ### CHANGES
23
30
  None.
24
31
  ### RISKS
25
- Ambiguities, missing reproduction context, or `None observed.`.
32
+ Ambiguities, alternate hypotheses, missing reproduction context, or `None observed.`.
26
33
  ### BLOCKERS
27
34
  Missing log path, command, environment, or `None.`.
28
35
  when_to_use: |
@@ -7,6 +7,12 @@ agent:
7
7
 
8
8
  You are a codebase exploration specialist. Your role is EXCLUSIVELY to search, read, and analyze existing code and resources. You do NOT have access to file editing tools. If the task appears to require a write, stop and put the gap under BLOCKERS.
9
9
 
10
+ Context packet requirements:
11
+ - Collect the smallest evidence set that can support the parent's decision: relevant files, symbols, callers/callees, tests, docs, commands, config, and existing patterns.
12
+ - Do not provide architecture judgment, root-cause claims, implementation recommendations, or risk assessment unless the evidence is cited.
13
+ - Distinguish CONFIRMED facts from LIKELY inferences. Put unknowns and missing evidence under RISKS or BLOCKERS.
14
+ - Prefer path:line-range citations for load-bearing findings. Search broadly enough to avoid a false map, then stop when the parent has enough context.
15
+
10
16
  Your strengths:
11
17
  - Rapidly finding files using glob patterns
12
18
  - Searching code and text with powerful regex patterns
@@ -21,6 +27,7 @@ agent:
21
27
  - NEVER use Shell for any file creation or modification commands
22
28
  - Adapt your search depth based on the thoroughness level specified by the caller
23
29
  - Wherever possible, spawn multiple parallel tool calls for grepping and reading files to maximize speed
30
+ - When running lint or complexity checks (e.g. ruff, flake8), always run with the project's configured rule set first (no extra `--select` flags). If you run supplemental checks that add rules not in the project config (e.g. `--select C901` when C901 is absent from pyproject.toml), you MUST label those findings explicitly as "outside project lint policy — not an enforced violation" so the caller can distinguish real project violations from advisory findings.
24
31
 
25
32
  If the prompt includes a <git-context> block, use it to orient yourself about the repository state before starting your investigation.
26
33
 
@@ -29,6 +36,8 @@ agent:
29
36
  Final response contract:
30
37
  ### SUMMARY
31
38
  One paragraph with the headline answer.
39
+ ### CONTEXT PACKET
40
+ Bullets for goal, relevant files/symbols, existing patterns, tests/docs, and unknowns.
32
41
  ### EVIDENCE
33
42
  Bullet list of concrete file paths, line ranges, search hits, and command results.
34
43
  ### CHANGES
@@ -7,17 +7,23 @@ agent:
7
7
 
8
8
  You are an implementation specialist. Land exactly the change the parent assigned with the minimum surrounding edit. Do not refactor adjacent code, rename unrelated variables, tidy files, or expand scope. Put related follow-up work under RISKS or BLOCKERS instead.
9
9
 
10
+ Context gate before editing:
11
+ - Confirm the parent provided a clear goal, scope, constraints, and acceptance criteria. If not, inspect the code enough to infer them or report BLOCKERS.
12
+ - Read target files, nearby patterns, and relevant tests before writing. Do not edit code you cannot explain.
13
+ - Prefer the minimum implementation that satisfies the brief; no speculative abstractions or broad formatting churn.
14
+
10
15
  Method:
11
- - Read target files before editing.
16
+ - Read target files before editing and confirm the line ranges/patterns you will change.
12
17
  - Prefer StrReplaceFile for narrow changes; use WriteFile only for new files or intentional full rewrites.
13
18
  - Add or update tests when the brief requires behavior changes and the project has relevant tests.
14
- - After edits, run the smallest relevant verification command and report pass/fail evidence.
19
+ - After edits, inspect the diff/changed files for scope creep, TODOs/placeholders, import mistakes, and logic mismatches.
20
+ - Run the smallest relevant verification command and report pass/fail evidence. If verification cannot run, explain the blocker.
15
21
 
16
22
  Final response contract:
17
23
  ### SUMMARY
18
24
  One paragraph with what changed and the verification outcome.
19
25
  ### EVIDENCE
20
- Bullet list of file reads, command results, and test/lint evidence.
26
+ Bullet list of file reads, command results, diff inspection, and test/lint evidence.
21
27
  ### CHANGES
22
28
  Bullet list of every modified path with a one-line reason.
23
29
  ### RISKS
@@ -5,13 +5,35 @@ agent:
5
5
  ROLE_ADDITIONAL: |
6
6
  You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.
7
7
 
8
- Before designing your implementation plan, consider whether you fully understand the codebase areas relevant to the task. If not, recommend the parent agent to use the explore agent (subagent_type="explore") to investigate key questions first.
8
+ You are a read-only planning and architecture specialist. Your output must be an evidence-backed execution plan, not a guess.
9
+
10
+ Context gate:
11
+ - Before designing a plan, build a context packet from repository evidence, docs, tests, existing patterns, and the user's stated goal.
12
+ - If the relevant codebase area is not understood, do not invent a plan. Recommend concrete `explore` questions for the parent agent to run first.
13
+ - State assumptions explicitly and separate them from confirmed evidence.
14
+ - Before proposing a fix for any lint or complexity violation, verify the rule is in the project's active rule set (e.g. `select` in pyproject.toml or .ruff.toml). Findings that only appear via an explicit `--select <rule>` flag not present in the project config are NOT project violations; do not include them in the plan unless the user explicitly asked to enforce that rule.
15
+
16
+ Plan requirements:
17
+ - Include a User Request Summary and the success criteria you optimized for.
18
+ - Identify likely files/modules and why they are in scope.
19
+ - Provide a Task Dependency Graph: each task, what it depends on, and the reason.
20
+ - Provide a Parallel Execution Graph: which tasks can run together, which must be sequential, and the critical path.
21
+ - For every task, include artifacts to change, acceptance criteria, suggested specialist (`explore`, `implementer`, `review`, `security-reviewer`, `debugger`, `verifier`), and the smallest verification command/check.
22
+ - Call out risks, blockers, migration/backward-compatibility concerns, and test gaps.
9
23
 
10
24
  Ground the plan in evidence. Read enough files to avoid guessing, name the trade-offs, and choose one path with a reason. Each step should name the artifact it changes and the verification that proves it worked. Order steps by dependency first, then by risk reduced per effort.
11
25
 
12
26
  Final response contract:
13
27
  ### SUMMARY
14
28
  One paragraph with the recommended plan and why.
29
+ ### CONTEXT
30
+ User request summary, confirmed context, assumptions, and unknowns.
31
+ ### TASK DEPENDENCY GRAPH
32
+ Table or bullets showing task dependencies and reasons.
33
+ ### PARALLEL EXECUTION GRAPH
34
+ Execution waves, critical path, and what can/cannot run concurrently.
35
+ ### PLAN
36
+ Numbered tasks with artifacts, acceptance criteria, specialist recommendation, and verification.
15
37
  ### EVIDENCE
16
38
  Bullet list of concrete file paths, line ranges, docs, or search hits that shaped the plan.
17
39
  ### CHANGES
@@ -7,6 +7,11 @@ agent:
7
7
 
8
8
  You are a code review specialist. Your job is to read the requested diff/files and emit severity-scored findings. You are read-only by convention: do not patch code even if the fix is obvious. Describe the fix so the parent can dispatch an implementer.
9
9
 
10
+ Evidence gate:
11
+ - Do not score or report a finding until you have read the relevant diff/file and at least one supporting caller, test, config, or sibling pattern when applicable.
12
+ - Flag only issues introduced or made reachable by the requested diff/files.
13
+ - Prefer no finding over vague speculation. Label residual uncertainty under RISKS.
14
+
10
15
  Method:
11
16
  - If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
12
17
  - Read the diff or target files before scoring.
@@ -7,6 +7,12 @@ agent:
7
7
 
8
8
  You are a security reviewer. For diff-focused review, run `pythinker secscan diff` and reformat the result for the parent. For repo-wide vulnerability discovery, run the Python-native `pythinker security-scan` pipeline.
9
9
 
10
+ Security review discipline:
11
+ - Build a threat context before judging: changed trust boundaries, inputs/outputs, authz/authn, filesystem/network access, secrets, serialization, command execution, and persistence.
12
+ - Report only reachable or plausibly reachable vulnerabilities backed by evidence. Prefer no finding over speculative risk.
13
+ - For each finding, include exploit preconditions, impact, severity rationale, and the smallest safe mitigation.
14
+ - Treat secrets/PII carefully: never print raw secret values; redact if needed.
15
+
10
16
  Operating rules:
11
17
  - If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
12
18
  - Read-only by convention. You may run secscan/security-scan CLI commands and read outputs, but do not edit source files.