pythinker-code 0.16.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 (841) hide show
  1. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/PKG-INFO +46 -48
  2. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/README.md +45 -47
  3. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/CHANGELOG.md +24 -0
  5. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/code_reviewer.yaml +2 -1
  6. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/coder.yaml +12 -2
  7. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/debugger.yaml +12 -5
  8. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/explore.yaml +9 -0
  9. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/implementer.yaml +9 -3
  10. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/plan.yaml +23 -1
  11. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/review.yaml +5 -0
  12. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/security_reviewer.yaml +6 -0
  13. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/system.md +32 -2
  14. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/verifier.yaml +11 -2
  15. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agentspec.py +10 -1
  16. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/app.py +11 -12
  17. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/agent_runner.py +24 -2
  18. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/manager.py +50 -2
  19. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/__init__.py +53 -2
  20. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/config.py +81 -25
  21. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/events.py +4 -0
  22. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/runner.py +35 -1
  23. pythinker_code-0.18.0/src/pythinker_code/scratchpad.py +895 -0
  24. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/session_state.py +2 -0
  25. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/agent.py +5 -0
  26. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/approval.py +14 -4
  27. pythinker_code-0.18.0/src/pythinker_code/soul/compaction_restore.py +287 -0
  28. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/pythinkersoul.py +123 -46
  29. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/slash.py +0 -1
  30. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/toolset.py +79 -1
  31. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/discovery.py +8 -0
  32. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/models.py +1 -0
  33. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/runner.py +19 -2
  34. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/store.py +2 -0
  35. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/config.py +18 -10
  36. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/agent/__init__.py +227 -18
  37. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/agent/description.md +6 -2
  38. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/ask_user/__init__.py +16 -0
  39. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read.md +1 -1
  40. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read.py +10 -1
  41. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/replace.py +3 -0
  42. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/write.py +3 -0
  43. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/__init__.py +39 -10
  44. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/bash.md +3 -3
  45. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/powershell.md +3 -3
  46. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/todo/__init__.py +29 -1
  47. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/__init__.py +74 -51
  48. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/__init__.py +11 -1
  49. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/bash_execution.py +13 -5
  50. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +3 -4
  51. pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/dynamic_border.py +37 -0
  52. pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/key_hints.py +55 -0
  53. pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/markdown.py +475 -0
  54. pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/panel.py +30 -0
  55. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/render_utils.py +6 -3
  56. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/settings_list.py +56 -7
  57. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/tool_execution.py +12 -16
  58. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/debug.py +29 -11
  59. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/design_system.py +17 -9
  60. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/echo.py +2 -9
  61. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/export_import.py +14 -10
  62. pythinker_code-0.18.0/src/pythinker_code/ui/shell/glyphs.py +55 -0
  63. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/keyboard.py +5 -0
  64. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/keymap.py +4 -0
  65. pythinker_code-0.18.0/src/pythinker_code/ui/shell/mcp_status.py +148 -0
  66. pythinker_code-0.18.0/src/pythinker_code/ui/shell/model_picker.py +114 -0
  67. pythinker_code-0.18.0/src/pythinker_code/ui/shell/motion.py +240 -0
  68. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/oauth.py +24 -18
  69. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/prompt.py +141 -25
  70. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selector.py +103 -15
  71. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/setup.py +14 -10
  72. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/slash.py +258 -137
  73. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/startup.py +3 -2
  74. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/task_browser.py +7 -2
  75. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +1 -0
  76. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +1 -1
  77. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +61 -14
  78. pythinker_code-0.18.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +467 -0
  79. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +30 -11
  80. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +5 -1
  81. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +11 -3
  82. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +5 -1
  83. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +5 -1
  84. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +10 -17
  85. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +5 -1
  86. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +35 -20
  87. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +2 -1
  88. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +6 -1
  89. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +9 -2
  90. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -1
  91. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/update.py +100 -98
  92. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage.py +9 -6
  93. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_render.py +20 -13
  94. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/__init__.py +6 -0
  95. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +7 -1
  96. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +30 -14
  97. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +283 -45
  98. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +9 -6
  99. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +14 -2
  100. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +15 -2
  101. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +280 -19
  102. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +13 -9
  103. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +42 -29
  104. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/theme.py +179 -181
  105. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/diff_render.py +16 -9
  106. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/syntax.py +13 -13
  107. pythinker_code-0.18.0/src/pythinker_code/utils/sleep_inhibitor.py +473 -0
  108. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/_baseUniq-C7Lm5yvo.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/_baseUniq-diyiadw5.js +1 -1
  109. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/arc-Dz2a-Hq4.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/arc-C_-dPtYA.js +1 -1
  110. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CJsZQU8P.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-pe7jaN72.js +1 -1
  111. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-CX9hqfTf.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DvNsLxaI.js +1 -1
  112. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-cSQejz9F.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DOutQDwU.js +1 -1
  113. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/channel-BEd858yH.js +1 -0
  114. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DENWwfQo.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CSkVLnTI.js +1 -1
  115. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BjAz7E1Q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-Sp6O21Fa.js +1 -1
  116. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DHREpwD8.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-HEkwgVVV.js +1 -1
  117. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-B_qgxaLM.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-JBzEF4BM.js +1 -1
  118. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CSkrSE_m.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D7NzL_UD.js +1 -1
  119. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-B102Qoa4.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CFUUnKRn.js +1 -1
  120. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CcH2XgAh.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BFM8Zf86.js +1 -1
  121. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BCrhDM6d.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BkppE9ae.js +1 -1
  122. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Crr9_YII.js +1 -0
  123. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Crr9_YII.js +1 -0
  124. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/clone-Dfc-F2za.js +1 -0
  125. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CxK2_ZRv.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CmR8Cdcu.js +1 -1
  126. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-P03CC8NX.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DAm3W4aX.js +1 -1
  127. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/cytoscape.esm-2bFCBNMd.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/cytoscape.esm-y1coXWUc.js +1 -1
  128. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-BT781HbA.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-B0i4dUeh.js +1 -1
  129. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-BnyX8Hza.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CpwOBk04.js +1 -1
  130. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CNxIhmQ7.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BKdKDUAt.js +1 -1
  131. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CfVSAgk2.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BWSTCXj5.js +1 -1
  132. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-t1gwlCQc.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CJeB4CQf.js +1 -1
  133. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CnZzBqWT.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-ChW3Nkg5.js +1 -1
  134. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DCdDrdcK.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-BCYS-5Wi.js +1 -1
  135. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-Ctp9RsTH.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CibT-GPx.js +1 -1
  136. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/graph-DrwQi5qA.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/graph-Bg8wdmyQ.js +1 -1
  137. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/index-B758--8h.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-C-9Nx5Zv.js +1 -1
  138. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/index--TWNXhaY.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-Crd7puVX.js +1 -1
  139. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/index-CzkMvfiJ.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-PSmqu2sC.js +2 -2
  140. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-Csp12hF4.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BZCKIRhX.js +1 -1
  141. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-zN4HAFCP.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BIv2-5-D.js +1 -1
  142. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-0-xpvozd.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-BbXFbER0.js +1 -1
  143. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/layout-BVsTxsKN.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/layout-Zmsvl1hy.js +1 -1
  144. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/linear-BYR73i1j.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/linear-BV_H68rk.js +1 -1
  145. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DmNoW0GC.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DVprBX-j.js +7 -7
  146. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/mermaid.core-Dc3U-PWB.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mermaid.core-CR7QF1E3.js +5 -5
  147. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/min-j-ny6Xor.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/min-Doa9BVeR.js +1 -1
  148. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-aqL9L8vw.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DNQnYfPv.js +1 -1
  149. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DQrHZG2X.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DVqIhUw6.js +1 -1
  150. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-u2BY8IXs.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-BuGgJuP-.js +1 -1
  151. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-L6zi-5FC.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DCQLUIxL.js +1 -1
  152. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CPnmSSfJ.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CSqLQRPC.js +1 -1
  153. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CnT5YJov.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-B9es9563.js +1 -1
  154. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DOg3yqFr.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-D6uJ4ieP.js +1 -1
  155. pythinker_code-0.18.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-KTWgI9rj.js +1 -0
  156. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BTl9Y_1U.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-B1yc8-Ia.js +1 -1
  157. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-q3mN72YJ.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-_HhSkYE5.js +1 -1
  158. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-C1jRvwXD.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-BUOOjSUz.js +1 -1
  159. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/index.html +1 -1
  160. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/install.ps1 +1 -1
  161. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/install.sh +1 -1
  162. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/types.py +48 -0
  163. pythinker_code-0.16.0/src/pythinker_code/ui/shell/components/key_hints.py +0 -24
  164. pythinker_code-0.16.0/src/pythinker_code/ui/shell/components/markdown.py +0 -227
  165. pythinker_code-0.16.0/src/pythinker_code/ui/shell/glyphs.py +0 -31
  166. pythinker_code-0.16.0/src/pythinker_code/ui/shell/mcp_status.py +0 -121
  167. pythinker_code-0.16.0/src/pythinker_code/ui/shell/model_picker.py +0 -318
  168. pythinker_code-0.16.0/src/pythinker_code/ui/shell/motion.py +0 -122
  169. pythinker_code-0.16.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -148
  170. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/channel-DmYfOdgd.js +0 -1
  171. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-qvGW6z7e.js +0 -1
  172. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-qvGW6z7e.js +0 -1
  173. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/clone-aktTc1WH.js +0 -1
  174. pythinker_code-0.16.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-qlhTG-tY.js +0 -1
  175. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/LICENSE +0 -0
  176. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/NOTICE +0 -0
  177. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/__init__.py +0 -0
  178. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/__main__.py +0 -0
  179. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  180. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/__init__.py +0 -0
  181. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/convert.py +0 -0
  182. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/host.py +0 -0
  183. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/mcp.py +0 -0
  184. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/server.py +0 -0
  185. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/session.py +0 -0
  186. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/tools.py +0 -0
  187. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/types.py +0 -0
  188. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/version.py +0 -0
  189. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  190. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  191. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  192. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  193. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  194. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/__init__.py +0 -0
  195. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  196. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/deepseek.py +0 -0
  197. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  198. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  199. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/minimax.py +0 -0
  200. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/oauth.py +0 -0
  201. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/ollama.py +0 -0
  202. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/openai.py +0 -0
  203. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  204. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/openrouter.py +0 -0
  205. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/platforms.py +0 -0
  206. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/__init__.py +0 -0
  207. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/ids.py +0 -0
  208. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/models.py +0 -0
  209. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/store.py +0 -0
  210. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/summary.py +0 -0
  211. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/background/worker.py +0 -0
  212. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/__main__.py +0 -0
  213. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  214. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/debug.py +0 -0
  215. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/export.py +0 -0
  216. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/info.py +0 -0
  217. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/mcp.py +0 -0
  218. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/plugin.py +0 -0
  219. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/review.py +0 -0
  220. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/secscan.py +0 -0
  221. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/security_scan.py +0 -0
  222. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/skill.py +0 -0
  223. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/toad.py +0 -0
  224. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/update.py +0 -0
  225. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/vis.py +0 -0
  226. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/web.py +0 -0
  227. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/constant.py +0 -0
  228. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/events.py +0 -0
  229. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/exception.py +0 -0
  230. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/execution_profiles.py +0 -0
  231. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/extensions.py +0 -0
  232. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/file_restore.py +0 -0
  233. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/__init__.py +0 -0
  234. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/config.py +0 -0
  235. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/engine.py +0 -0
  236. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/llm.py +0 -0
  237. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/metadata.py +0 -0
  238. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/native.py +0 -0
  239. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/__init__.py +0 -0
  240. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/llm.py +0 -0
  241. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/manager.py +0 -0
  242. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/models.py +0 -0
  243. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/notifier.py +0 -0
  244. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/store.py +0 -0
  245. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/wire.py +0 -0
  246. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/__init__.py +0 -0
  247. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/manager.py +0 -0
  248. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/tool.py +0 -0
  249. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/prompt_templates.py +0 -0
  250. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/__init__.py +0 -0
  251. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/compact.md +0 -0
  252. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/init.md +0 -0
  253. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/py.typed +0 -0
  254. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/session.py +0 -0
  255. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/session_fork.py +0 -0
  256. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/share.py +0 -0
  257. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/__init__.py +0 -0
  258. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  259. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  260. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  261. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/lockfile.py +0 -0
  262. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  263. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  264. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  265. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  266. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  267. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  268. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  269. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  270. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  271. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  272. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  273. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  274. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  275. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  276. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/__init__.py +0 -0
  277. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/btw.py +0 -0
  278. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/compaction.py +0 -0
  279. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/context.py +0 -0
  280. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  281. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  282. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  283. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  284. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  285. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/message.py +0 -0
  286. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/permission.py +0 -0
  287. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/__init__.py +0 -0
  288. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/builder.py +0 -0
  289. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/core.py +0 -0
  290. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/git_context.py +0 -0
  291. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/output.py +0 -0
  292. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/registry.py +0 -0
  293. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  294. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/crash.py +0 -0
  295. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/errors.py +0 -0
  296. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  297. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/otel.py +0 -0
  298. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  299. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/sink.py +0 -0
  300. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  301. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/__init__.py +0 -0
  302. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  303. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  304. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  305. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/input.md +0 -0
  306. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/list.md +0 -0
  307. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/output.md +0 -0
  308. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/stop.md +0 -0
  309. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/display.py +0 -0
  310. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  311. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  312. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  313. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/glob.md +0 -0
  314. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/glob.py +0 -0
  315. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/grep.md +0 -0
  316. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  317. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  318. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  319. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  320. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/replace.md +0 -0
  321. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/utils.py +0 -0
  322. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/write.md +0 -0
  323. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  324. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/description.md +0 -0
  325. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  326. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  327. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  328. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  329. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  330. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/skill/description.md +0 -0
  331. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/test.py +0 -0
  332. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  333. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/think/think.md +0 -0
  334. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  335. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/utils.py +0 -0
  336. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  337. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  338. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  339. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/search.md +0 -0
  340. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/search.py +0 -0
  341. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/__init__.py +0 -0
  342. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  343. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  344. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  345. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  346. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  347. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  348. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  349. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  350. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/console.py +0 -0
  351. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  352. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  353. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  354. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  355. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  356. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  357. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  358. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  359. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  360. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  361. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  362. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  363. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  364. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  365. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  366. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  367. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  368. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  369. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  370. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  371. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  372. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  373. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  374. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  375. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  376. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  377. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  378. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  379. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/tui_config.py +0 -0
  380. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  381. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/__init__.py +0 -0
  382. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  383. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  384. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/broadcast.py +0 -0
  385. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/changelog.py +0 -0
  386. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/clipboard.py +0 -0
  387. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/datetime.py +0 -0
  388. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/diff.py +0 -0
  389. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/editor.py +0 -0
  390. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/environment.py +0 -0
  391. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/envvar.py +0 -0
  392. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/export.py +0 -0
  393. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/file_filter.py +0 -0
  394. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  395. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/io.py +0 -0
  396. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/logging.py +0 -0
  397. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/media_tags.py +0 -0
  398. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/message.py +0 -0
  399. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/path.py +0 -0
  400. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/proctitle.py +0 -0
  401. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/proxy.py +0 -0
  402. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  403. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  404. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  405. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  406. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  407. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  408. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/sensitive.py +0 -0
  409. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/server.py +0 -0
  410. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/signals.py +0 -0
  411. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  412. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/string.py +0 -0
  413. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  414. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/term.py +0 -0
  415. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/typing.py +0 -0
  416. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/__init__.py +0 -0
  417. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  418. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  419. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  420. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/system.py +0 -0
  421. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/app.py +0 -0
  422. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  423. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  424. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  425. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  426. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  427. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  428. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  429. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  430. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  431. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  432. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/index.html +0 -0
  433. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/__init__.py +0 -0
  434. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/__init__.py +0 -0
  435. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/config.py +0 -0
  436. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/open_in.py +0 -0
  437. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/sessions.py +0 -0
  438. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/app.py +0 -0
  439. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/auth.py +0 -0
  440. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/models.py +0 -0
  441. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  442. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/messages.py +0 -0
  443. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/process.py +0 -0
  444. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/worker.py +0 -0
  445. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/_headers +0 -0
  446. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  447. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  448. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  449. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  450. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  451. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  452. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  453. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  454. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  455. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  456. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  457. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  458. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  459. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  460. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  461. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  462. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  463. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  464. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  465. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  466. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  467. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  468. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  469. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  470. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  471. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  472. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  473. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  474. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  475. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  476. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  477. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  478. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  479. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  480. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  481. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  482. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  483. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  484. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  485. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  486. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  487. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  488. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  489. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  490. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  491. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  492. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  493. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  494. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  495. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  496. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  497. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  498. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  499. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  500. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  501. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  502. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  503. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  504. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  505. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  506. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  507. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  508. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  509. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  510. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  511. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  512. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  513. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  514. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  515. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  516. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  517. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  518. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  519. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  520. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  521. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  522. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  523. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  524. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  525. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  526. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  527. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  528. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  529. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  530. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  531. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  532. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  533. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  534. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  535. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  536. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  537. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  538. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  539. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  540. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  541. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  542. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  543. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  544. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  545. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  546. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  547. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  548. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  549. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  550. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  551. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  552. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  553. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  554. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  555. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  556. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  557. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  558. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  559. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  560. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  561. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  562. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  563. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  564. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  565. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  566. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  567. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  568. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  569. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  570. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  571. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  572. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  573. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  574. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  575. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  576. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  577. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  578. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  579. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  580. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  581. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  582. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  583. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  584. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  585. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  586. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  587. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  588. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  589. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  590. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  591. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  592. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  593. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  594. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  595. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  596. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  597. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  598. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  599. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  600. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  601. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  602. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  603. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  604. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  605. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  606. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  607. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  608. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  609. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  610. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  611. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  612. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  613. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  614. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  615. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  616. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  617. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  618. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  619. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  620. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  621. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  622. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  623. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  624. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  625. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  626. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  627. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  628. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  629. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  630. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  631. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  632. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  633. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  634. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  635. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  636. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  637. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  638. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  639. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  640. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  641. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  642. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  643. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  644. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  645. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  646. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  647. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  648. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  649. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  650. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  651. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  652. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  653. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  654. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  655. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  656. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  657. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  658. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  659. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  660. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  661. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  662. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  663. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  664. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  665. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  666. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  667. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  668. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  669. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  670. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  671. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  672. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  673. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  674. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  675. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  676. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  677. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  678. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  679. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  680. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  681. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  682. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  683. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  684. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  685. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  686. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  687. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  688. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  689. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  690. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  691. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  692. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  693. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  694. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  695. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  696. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  697. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  698. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  699. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  700. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  701. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  702. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  703. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  704. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  705. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  706. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  707. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  708. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  709. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  710. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  711. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  712. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  713. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  714. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  715. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  716. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  717. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  718. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  719. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  720. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  721. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  722. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  723. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  724. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  725. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  726. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  727. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  728. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  729. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  730. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  731. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  732. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  733. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  734. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  735. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  736. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  737. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  738. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  739. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  740. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  741. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  742. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  743. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  744. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  745. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  746. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  747. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  748. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  749. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  750. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  751. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  752. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  753. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  754. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  755. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  756. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  757. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  758. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  759. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  760. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  761. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  762. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  763. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  764. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  765. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  766. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  767. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  768. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  769. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  770. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  771. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  772. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  773. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  774. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  775. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  776. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  777. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  778. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  779. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  780. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  781. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  782. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  783. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  784. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  785. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  786. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  787. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  788. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  789. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  790. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  791. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  792. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  793. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  794. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  795. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  796. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  797. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  798. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  799. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  800. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  801. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  802. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  803. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  804. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  805. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  806. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  807. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  808. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  809. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  810. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  811. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  812. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  813. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  814. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  815. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  816. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  817. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  818. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  819. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  820. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  821. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  822. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  823. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  824. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  825. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  826. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  827. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  828. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  829. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  830. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  831. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  832. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/logo.png +0 -0
  833. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/store/__init__.py +0 -0
  834. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/web/store/sessions.py +0 -0
  835. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/__init__.py +0 -0
  836. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/file.py +0 -0
  837. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  838. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/protocol.py +0 -0
  839. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/root_hub.py +0 -0
  840. {pythinker_code-0.16.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/serde.py +0 -0
  841. {pythinker_code-0.16.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.16.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
@@ -80,7 +80,6 @@ Description-Content-Type: text/markdown
80
80
  [![CI](https://img.shields.io/github/actions/workflow/status/mohamed-elkholy95/Pythinker-Code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/mohamed-elkholy95/Pythinker-Code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
81
81
 
82
82
  [![Downloads](https://img.shields.io/pepy/dt/pythinker-code?cacheSeconds=300)](https://pepy.tech/projects/pythinker-code)
83
- [![Installs](https://img.shields.io/endpoint?url=https://pythinker.com/api/installs/badge&cacheSeconds=300)](https://pythinker.com)
84
83
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
85
84
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
86
85
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -116,13 +115,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
116
115
 
117
116
  ---
118
117
 
119
- ## 🆕 What's New in 0.16.0
118
+ ## 🆕 What's New in 0.18.0
120
119
 
121
- - **Native installation is standardized across platforms.** Quick Start now leads with the canonical hosted installers: `irm https://pythinker.com/install.ps1 | iex` on Windows and `curl -fsSL https://pythinker.com/install.sh | bash` on macOS/Linux.
122
- - **Old local installer wrappers are removed from user-facing docs.** Legacy local shell wrappers and Python-tool manager shortcuts are no longer presented as install options; Python package installs remain documented only as the universal fallback.
123
- - **Release artifact links are consistent.** Manual `.exe`, `.deb`, `.rpm`, and tarball instructions all point at GitHub Release assets for `0.16.0` and include SHA-256 verification guidance.
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.
124
125
 
125
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.16.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).
126
127
 
127
128
 
128
129
  ---
@@ -212,10 +213,10 @@ matches your OS — no Python, Node, or `uv` prerequisite.
212
213
 
213
214
  | Platform | Recommended install | Artifact source |
214
215
  |---|---|---|
215
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.16.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
216
- | **🍎 macOS / 🐧 Linux** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
217
- | **🍎 macOS — Homebrew** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | auto-published Homebrew tap |
218
- | **🐧 Linux — system package** | Download the `.deb` or `.rpm` for your distro below | [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
+ | **<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
+ | **<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
+ | **<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) |
219
220
  | **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
220
221
 
221
222
  Every artifact ships with a matching `.sha256` file — verify before install on
@@ -237,7 +238,7 @@ pythinker # start the interactive TUI
237
238
 
238
239
  ### 🪟 Windows — native installer
239
240
 
240
- `PythinkerSetup-0.16.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
241
242
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
242
243
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
243
244
  the change. **No UAC prompt.**
@@ -248,13 +249,13 @@ irm https://pythinker.com/install.ps1 | iex
248
249
 
249
250
  # Or manually download the installer + checksum from the Releases page,
250
251
  # verify with Get-FileHash, then run:
251
- .\PythinkerSetup-0.16.0.exe
252
+ .\PythinkerSetup-0.18.0.exe
252
253
 
253
254
  # Open a fresh PowerShell
254
255
  pythinker --version
255
256
  ```
256
257
 
257
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.16.0.exe /ALLUSERS`
258
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.18.0.exe /ALLUSERS`
258
259
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
259
260
 
260
261
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -271,7 +272,7 @@ the files and the PATH edit.
271
272
 
272
273
  ---
273
274
 
274
- ### 🍎 macOS — Homebrew tap
275
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew tap
275
276
 
276
277
  ```sh
277
278
  # 1. Install
@@ -297,33 +298,33 @@ auto-update; run this whenever you want the latest).
297
298
 
298
299
  ---
299
300
 
300
- ### 🐧 Linux — system packages
301
+ ### <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system packages
301
302
 
302
303
  Native `.deb` and `.rpm` packages for both `x86_64` and `aarch64` are
303
304
  attached to every GitHub Release.
304
305
 
305
306
  ```sh
306
307
  # Debian / Ubuntu (x86_64)
307
- sudo dpkg -i pythinker-code_0.16.0_amd64.deb
308
+ sudo dpkg -i pythinker-code_0.18.0_amd64.deb
308
309
  sudo apt-get install -f # only if dpkg reports missing deps
309
310
 
310
311
  # Debian / Ubuntu (ARM64)
311
- sudo dpkg -i pythinker-code_0.16.0_arm64.deb
312
+ sudo dpkg -i pythinker-code_0.18.0_arm64.deb
312
313
 
313
314
  # Fedora / RHEL / openSUSE (x86_64)
314
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.x86_64.rpm
315
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.x86_64.rpm.sha256
316
- sha256sum -c pythinker-code-0.16.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
317
318
  # Fedora / RHEL:
318
- sudo dnf install ./pythinker-code-0.16.0.x86_64.rpm
319
+ sudo dnf install ./pythinker-code-0.18.0.x86_64.rpm
319
320
  # openSUSE:
320
- sudo zypper install ./pythinker-code-0.16.0.x86_64.rpm
321
+ sudo zypper install ./pythinker-code-0.18.0.x86_64.rpm
321
322
 
322
323
  # Fedora / RHEL (aarch64)
323
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.aarch64.rpm
324
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.aarch64.rpm.sha256
325
- sha256sum -c pythinker-code-0.16.0.aarch64.rpm.sha256
326
- sudo dnf install ./pythinker-code-0.16.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
327
328
  ```
328
329
 
329
330
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -332,8 +333,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
332
333
  **Verify before install:**
333
334
 
334
335
  ```sh
335
- sha256sum -c pythinker-code_0.16.0_amd64.deb.sha256 # Debian/Ubuntu
336
- sha256sum -c pythinker-code-0.16.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
337
338
  ```
338
339
 
339
340
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -349,7 +350,7 @@ sudo rpm -e pythinker-code # Fedora/RHEL
349
350
 
350
351
  ---
351
352
 
352
- ### 🌐 macOS / Linux — curl-bash native installer
353
+ ### <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-bash native installer
353
354
 
354
355
  For containers, fresh VMs, or any host without a system package manager.
355
356
  The canonical `https://pythinker.com/install.sh` endpoint is backed by
@@ -363,7 +364,7 @@ at `~/.local/bin/pythinker`.
363
364
  curl -fsSL https://pythinker.com/install.sh | bash
364
365
 
365
366
  # Pin a specific version
366
- curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.16.0
367
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.18.0
367
368
 
368
369
  # Custom prefix (defaults to $HOME/.local)
369
370
  curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -384,9 +385,9 @@ Supported targets:
384
385
 
385
386
  | `uname -s / -m` | Tarball asset |
386
387
  |---|---|
387
- | Linux / x86_64 | `pythinker-0.16.0-x86_64-unknown-linux-gnu.tar.gz` |
388
- | Linux / aarch64 | `pythinker-0.16.0-aarch64-unknown-linux-gnu.tar.gz` |
389
- | Darwin / arm64 | `pythinker-0.16.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` |
390
391
 
391
392
  The script prints PATH guidance if `~/.local/bin` isn't already on your
392
393
  `$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
@@ -616,14 +617,18 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
616
617
  ### 🛠️ Manage persistent MCP servers
617
618
 
618
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
+
619
624
  # 🌐 Streamable HTTP server with API key
620
- pythinker mcp add --transport http context7 https://mcp.context7.com/mcp \
621
- --header "CONTEXT7_API_KEY: ctx7sk-your-key"
625
+ pythinker mcp add --transport http docs https://example.com/mcp \
626
+ --header "API_KEY: your-key"
622
627
 
623
628
  # 🔐 Streamable HTTP server with OAuth
624
629
  pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
625
630
 
626
- # 💻 stdio server
631
+ # 💻 stdio server with explicit transport
627
632
  pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
628
633
 
629
634
  # 📋 List, authorize, test, and remove
@@ -713,16 +718,9 @@ file paths, or any user-identifying data. Two channels:
713
718
  - Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
714
719
  - Tool arguments (e.g. what file you read, what command you ran)
715
720
 
716
- ### Opting in or forcing off
717
-
718
- Telemetry is off by default. To enable it for a process:
719
-
720
- ```sh
721
- export PYTHINKER_ENABLE_TELEMETRY=1
722
- pythinker
723
- ```
721
+ ### Turning it off
724
722
 
725
- To force telemetry off even if another setting enabled it:
723
+ Telemetry is on by default. To turn it off:
726
724
 
727
725
  ```sh
728
726
  # 1. Per-invocation CLI flag
@@ -752,8 +750,8 @@ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
752
750
  export PYTHINKER_OTEL_TOKEN="<your bearer token>"
753
751
  ```
754
752
 
755
- The defaults point at infrastructure operated by the pythinker maintainers;
756
- 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.
757
755
 
758
756
  ---
759
757
 
@@ -15,7 +15,6 @@
15
15
  [![CI](https://img.shields.io/github/actions/workflow/status/mohamed-elkholy95/Pythinker-Code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/mohamed-elkholy95/Pythinker-Code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
16
16
 
17
17
  [![Downloads](https://img.shields.io/pepy/dt/pythinker-code?cacheSeconds=300)](https://pepy.tech/projects/pythinker-code)
18
- [![Installs](https://img.shields.io/endpoint?url=https://pythinker.com/api/installs/badge&cacheSeconds=300)](https://pythinker.com)
19
18
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
20
19
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
21
20
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -51,13 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
51
50
 
52
51
  ---
53
52
 
54
- ## 🆕 What's New in 0.16.0
53
+ ## 🆕 What's New in 0.18.0
55
54
 
56
- - **Native installation is standardized across platforms.** Quick Start now leads with the canonical hosted installers: `irm https://pythinker.com/install.ps1 | iex` on Windows and `curl -fsSL https://pythinker.com/install.sh | bash` on macOS/Linux.
57
- - **Old local installer wrappers are removed from user-facing docs.** Legacy local shell wrappers and Python-tool manager shortcuts are no longer presented as install options; Python package installs remain documented only as the universal fallback.
58
- - **Release artifact links are consistent.** Manual `.exe`, `.deb`, `.rpm`, and tarball instructions all point at GitHub Release assets for `0.16.0` and include SHA-256 verification guidance.
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.
59
60
 
60
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.16.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).
61
62
 
62
63
 
63
64
  ---
@@ -147,10 +148,10 @@ matches your OS — no Python, Node, or `uv` prerequisite.
147
148
 
148
149
  | Platform | Recommended install | Artifact source |
149
150
  |---|---|---|
150
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.16.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
151
- | **🍎 macOS / 🐧 Linux** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
152
- | **🍎 macOS — Homebrew** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | auto-published Homebrew tap |
153
- | **🐧 Linux — system package** | Download the `.deb` or `.rpm` for your distro below | [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
+ | **<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
+ | **<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
+ | **<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) |
154
155
  | **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
155
156
 
156
157
  Every artifact ships with a matching `.sha256` file — verify before install on
@@ -172,7 +173,7 @@ pythinker # start the interactive TUI
172
173
 
173
174
  ### 🪟 Windows — native installer
174
175
 
175
- `PythinkerSetup-0.16.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
176
177
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
177
178
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
178
179
  the change. **No UAC prompt.**
@@ -183,13 +184,13 @@ irm https://pythinker.com/install.ps1 | iex
183
184
 
184
185
  # Or manually download the installer + checksum from the Releases page,
185
186
  # verify with Get-FileHash, then run:
186
- .\PythinkerSetup-0.16.0.exe
187
+ .\PythinkerSetup-0.18.0.exe
187
188
 
188
189
  # Open a fresh PowerShell
189
190
  pythinker --version
190
191
  ```
191
192
 
192
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.16.0.exe /ALLUSERS`
193
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.18.0.exe /ALLUSERS`
193
194
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
194
195
 
195
196
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -206,7 +207,7 @@ the files and the PATH edit.
206
207
 
207
208
  ---
208
209
 
209
- ### 🍎 macOS — Homebrew tap
210
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew tap
210
211
 
211
212
  ```sh
212
213
  # 1. Install
@@ -232,33 +233,33 @@ auto-update; run this whenever you want the latest).
232
233
 
233
234
  ---
234
235
 
235
- ### 🐧 Linux — system packages
236
+ ### <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system packages
236
237
 
237
238
  Native `.deb` and `.rpm` packages for both `x86_64` and `aarch64` are
238
239
  attached to every GitHub Release.
239
240
 
240
241
  ```sh
241
242
  # Debian / Ubuntu (x86_64)
242
- sudo dpkg -i pythinker-code_0.16.0_amd64.deb
243
+ sudo dpkg -i pythinker-code_0.18.0_amd64.deb
243
244
  sudo apt-get install -f # only if dpkg reports missing deps
244
245
 
245
246
  # Debian / Ubuntu (ARM64)
246
- sudo dpkg -i pythinker-code_0.16.0_arm64.deb
247
+ sudo dpkg -i pythinker-code_0.18.0_arm64.deb
247
248
 
248
249
  # Fedora / RHEL / openSUSE (x86_64)
249
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.x86_64.rpm
250
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.x86_64.rpm.sha256
251
- sha256sum -c pythinker-code-0.16.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
252
253
  # Fedora / RHEL:
253
- sudo dnf install ./pythinker-code-0.16.0.x86_64.rpm
254
+ sudo dnf install ./pythinker-code-0.18.0.x86_64.rpm
254
255
  # openSUSE:
255
- sudo zypper install ./pythinker-code-0.16.0.x86_64.rpm
256
+ sudo zypper install ./pythinker-code-0.18.0.x86_64.rpm
256
257
 
257
258
  # Fedora / RHEL (aarch64)
258
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.aarch64.rpm
259
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.16.0/pythinker-code-0.16.0.aarch64.rpm.sha256
260
- sha256sum -c pythinker-code-0.16.0.aarch64.rpm.sha256
261
- sudo dnf install ./pythinker-code-0.16.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
262
263
  ```
263
264
 
264
265
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -267,8 +268,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
267
268
  **Verify before install:**
268
269
 
269
270
  ```sh
270
- sha256sum -c pythinker-code_0.16.0_amd64.deb.sha256 # Debian/Ubuntu
271
- sha256sum -c pythinker-code-0.16.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
272
273
  ```
273
274
 
274
275
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -284,7 +285,7 @@ sudo rpm -e pythinker-code # Fedora/RHEL
284
285
 
285
286
  ---
286
287
 
287
- ### 🌐 macOS / Linux — curl-bash native installer
288
+ ### <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-bash native installer
288
289
 
289
290
  For containers, fresh VMs, or any host without a system package manager.
290
291
  The canonical `https://pythinker.com/install.sh` endpoint is backed by
@@ -298,7 +299,7 @@ at `~/.local/bin/pythinker`.
298
299
  curl -fsSL https://pythinker.com/install.sh | bash
299
300
 
300
301
  # Pin a specific version
301
- curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.16.0
302
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.18.0
302
303
 
303
304
  # Custom prefix (defaults to $HOME/.local)
304
305
  curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -319,9 +320,9 @@ Supported targets:
319
320
 
320
321
  | `uname -s / -m` | Tarball asset |
321
322
  |---|---|
322
- | Linux / x86_64 | `pythinker-0.16.0-x86_64-unknown-linux-gnu.tar.gz` |
323
- | Linux / aarch64 | `pythinker-0.16.0-aarch64-unknown-linux-gnu.tar.gz` |
324
- | Darwin / arm64 | `pythinker-0.16.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` |
325
326
 
326
327
  The script prints PATH guidance if `~/.local/bin` isn't already on your
327
328
  `$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
@@ -551,14 +552,18 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
551
552
  ### 🛠️ Manage persistent MCP servers
552
553
 
553
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
+
554
559
  # 🌐 Streamable HTTP server with API key
555
- pythinker mcp add --transport http context7 https://mcp.context7.com/mcp \
556
- --header "CONTEXT7_API_KEY: ctx7sk-your-key"
560
+ pythinker mcp add --transport http docs https://example.com/mcp \
561
+ --header "API_KEY: your-key"
557
562
 
558
563
  # 🔐 Streamable HTTP server with OAuth
559
564
  pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
560
565
 
561
- # 💻 stdio server
566
+ # 💻 stdio server with explicit transport
562
567
  pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
563
568
 
564
569
  # 📋 List, authorize, test, and remove
@@ -648,16 +653,9 @@ file paths, or any user-identifying data. Two channels:
648
653
  - Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
649
654
  - Tool arguments (e.g. what file you read, what command you ran)
650
655
 
651
- ### Opting in or forcing off
652
-
653
- Telemetry is off by default. To enable it for a process:
654
-
655
- ```sh
656
- export PYTHINKER_ENABLE_TELEMETRY=1
657
- pythinker
658
- ```
656
+ ### Turning it off
659
657
 
660
- To force telemetry off even if another setting enabled it:
658
+ Telemetry is on by default. To turn it off:
661
659
 
662
660
  ```sh
663
661
  # 1. Per-invocation CLI flag
@@ -687,8 +685,8 @@ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
687
685
  export PYTHINKER_OTEL_TOKEN="<your bearer token>"
688
686
  ```
689
687
 
690
- The defaults point at infrastructure operated by the pythinker maintainers;
691
- 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.
692
690
 
693
691
  ---
694
692
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.16.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,30 @@ 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
+
30
+ ## 0.17.0 (2026-05-25)
31
+
32
+ ### What changed in this release
33
+
34
+ - **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.
35
+ - **Better subagent orchestration.** Subagent specs merge inherited subagent maps, foreground and background 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.
36
+ - **Polished terminal workflow.** The shell adopts the robot-brand palette, compact transcript/agent/file-mention menus, pinned live todo activity, calmer tool output, safer auto-backgrounding for long shell commands, and updated render snapshots.
37
+ - **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.
38
+ - **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.
39
+
40
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.17.0`, or use the native installer for your OS (see the README install table).
41
+
18
42
  ## 0.16.0 (2026-05-24)
19
43
 
20
44
  ### 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