pythinker-code 0.15.0__tar.gz → 0.17.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 (834) hide show
  1. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/PKG-INFO +41 -60
  2. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/README.md +40 -59
  3. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/CHANGELOG.md +22 -0
  5. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/system.md +2 -2
  6. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agentspec.py +10 -1
  7. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/app.py +0 -9
  8. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/agent_runner.py +10 -1
  9. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/manager.py +8 -0
  10. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/__init__.py +5 -0
  11. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/hooks/events.py +4 -0
  12. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/hooks/runner.py +35 -1
  13. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/session_state.py +2 -0
  14. pythinker_code-0.17.0/src/pythinker_code/soul/compaction_restore.py +287 -0
  15. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/pythinkersoul.py +63 -12
  16. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/slash.py +0 -1
  17. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/discovery.py +8 -0
  18. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/models.py +1 -0
  19. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/runner.py +19 -2
  20. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/store.py +2 -0
  21. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/agent/__init__.py +88 -5
  22. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/agent/description.md +2 -2
  23. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/read.md +1 -1
  24. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/read.py +10 -1
  25. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/shell/__init__.py +20 -9
  26. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/shell/bash.md +3 -3
  27. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/shell/powershell.md +3 -3
  28. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/__init__.py +70 -50
  29. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/bash_execution.py +6 -3
  30. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/key_hints.py +3 -2
  31. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/markdown.py +102 -2
  32. pythinker_code-0.17.0/src/pythinker_code/ui/shell/components/panel.py +30 -0
  33. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/render_utils.py +6 -3
  34. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/tool_execution.py +10 -16
  35. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/debug.py +29 -11
  36. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/design_system.py +17 -9
  37. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/export_import.py +14 -10
  38. pythinker_code-0.17.0/src/pythinker_code/ui/shell/glyphs.py +47 -0
  39. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/keyboard.py +5 -0
  40. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/keymap.py +4 -0
  41. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/mcp_status.py +13 -13
  42. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/model_picker.py +9 -8
  43. pythinker_code-0.17.0/src/pythinker_code/ui/shell/motion.py +191 -0
  44. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/oauth.py +24 -18
  45. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/prompt.py +97 -26
  46. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selector.py +2 -1
  47. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/setup.py +14 -10
  48. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/slash.py +238 -136
  49. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/startup.py +3 -2
  50. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/task_browser.py +7 -2
  51. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +1 -0
  52. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +1 -1
  53. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +16 -12
  54. pythinker_code-0.17.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +460 -0
  55. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +2 -1
  56. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +30 -19
  57. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/update.py +100 -98
  58. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage.py +9 -6
  59. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_render.py +20 -13
  60. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +30 -14
  61. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +28 -12
  62. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +9 -6
  63. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +14 -2
  64. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +11 -1
  65. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +154 -12
  66. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +13 -9
  67. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +42 -29
  68. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/theme.py +179 -181
  69. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/diff_render.py +16 -9
  70. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/syntax.py +8 -8
  71. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/_baseUniq-FLikL5oP.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/_baseUniq-qyLZSOfA.js +1 -1
  72. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/arc-CH7aTkr9.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/arc-CYkfKUJw.js +1 -1
  73. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DjjsbT9J.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Cc3dJmlV.js +1 -1
  74. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-D00CC7dg.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-HSBk6vox.js +1 -1
  75. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BZ8YW5l9.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-wRemIQog.js +1 -1
  76. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/channel-B7CcdrQR.js +1 -0
  77. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CT51XVd2.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-0esCM_vg.js +1 -1
  78. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-D9cOsagU.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-C55bd2_o.js +1 -1
  79. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DLU0G-z9.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DJxNZVQC.js +1 -1
  80. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BoYyatMl.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CEWPxLfs.js +1 -1
  81. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BvtZuN5v.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DmhbuRTm.js +1 -1
  82. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-UzYfy8VX.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-nrPUkuWR.js +1 -1
  83. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CkjMyo71.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CzXInrrR.js +1 -1
  84. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-FwTnUvW6.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DREZe46B.js +1 -1
  85. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-1oL3irp2.js +1 -0
  86. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-1oL3irp2.js +1 -0
  87. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/clone-aTWLJUtw.js +1 -0
  88. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DEzuAcDQ.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DMVWN-ml.js +1 -1
  89. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-GsDbZVos.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Coir87Qv.js +1 -1
  90. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/cytoscape.esm-CyvSsNDx.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/cytoscape.esm-eAWqnCYK.js +1 -1
  91. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Cz8X-74N.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CiTUIg0q.js +1 -1
  92. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-GfM-PGgf.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-Cq9GXOjk.js +1 -1
  93. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-C1ELKuDf.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Eamm6xAa.js +1 -1
  94. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BnjnqEbK.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DA1Yz6Pa.js +1 -1
  95. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-DhduFnCm.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-DzlJ-wwC.js +1 -1
  96. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-Cz66XZ8r.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-Bz9U20to.js +1 -1
  97. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-D2ZFH9bE.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-fsG79E9p.js +1 -1
  98. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CjbNsL7k.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BjchK9W1.js +1 -1
  99. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/graph-DJoi1jP0.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/graph-DbF6cZU0.js +1 -1
  100. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/index-Cjy8jHlq.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-BLAcYwJO.js +1 -1
  101. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/index-B5iJX3GK.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-BgIGGFpA.js +1 -1
  102. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/index-CwS0EXkr.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-Brd7Qj46.js +2 -2
  103. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CY1rxXp5.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CYSDBUZQ.js +1 -1
  104. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CIoAb7p1.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BeF28JOm.js +1 -1
  105. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-Cv0RkQOy.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-BVAC2O5Q.js +1 -1
  106. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/layout-By6G60Po.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/layout-DNSNr4If.js +1 -1
  107. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/linear-B2R4zVv-.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/linear-HQWQZMSq.js +1 -1
  108. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Bl-SdXa2.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BeS6uII_.js +7 -7
  109. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/mermaid.core-DZmvwVNs.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mermaid.core-CsiBWAvS.js +5 -5
  110. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/min-ayt5ZU-J.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/min-z2ooYt5Q.js +1 -1
  111. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CBnIEP6L.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BrkkNtDO.js +1 -1
  112. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-vMh5x4GJ.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-C0odTEkg.js +1 -1
  113. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-ngAbPtkD.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Daco3FUa.js +1 -1
  114. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-C8VB4e1y.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-vOrTEG8b.js +1 -1
  115. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DO_AEX2X.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BVExYdTG.js +1 -1
  116. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BhW0R8OX.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BkPzuwcM.js +1 -1
  117. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-l1IzipMH.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-Bontz6tD.js +1 -1
  118. pythinker_code-0.17.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-vD5xTSoN.js +1 -0
  119. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-VlHp4E46.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CxfiYDXf.js +1 -1
  120. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CD_xN-Le.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-B-wzCRqq.js +1 -1
  121. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DD9WyEHn.js → pythinker_code-0.17.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DIGOnUa7.js +1 -1
  122. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/index.html +1 -1
  123. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/install.ps1 +1 -1
  124. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/install.sh +1 -1
  125. pythinker_code-0.15.0/src/pythinker_code/ui/shell/glyphs.py +0 -31
  126. pythinker_code-0.15.0/src/pythinker_code/ui/shell/motion.py +0 -122
  127. pythinker_code-0.15.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -148
  128. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/channel-ChLkGicq.js +0 -1
  129. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-CVLXpajg.js +0 -1
  130. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-CVLXpajg.js +0 -1
  131. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/clone-Bb8bPI91.js +0 -1
  132. pythinker_code-0.15.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-uNOmVN18.js +0 -1
  133. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/LICENSE +0 -0
  134. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/NOTICE +0 -0
  135. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/__init__.py +0 -0
  136. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/__main__.py +0 -0
  137. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  138. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/__init__.py +0 -0
  139. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/convert.py +0 -0
  140. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/host.py +0 -0
  141. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/mcp.py +0 -0
  142. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/server.py +0 -0
  143. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/session.py +0 -0
  144. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/tools.py +0 -0
  145. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/types.py +0 -0
  146. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/acp/version.py +0 -0
  147. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  148. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  149. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  150. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  151. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  152. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  153. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  154. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  155. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  156. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  157. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  158. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  159. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  160. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  161. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/__init__.py +0 -0
  162. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  163. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/deepseek.py +0 -0
  164. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  165. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  166. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/minimax.py +0 -0
  167. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/oauth.py +0 -0
  168. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/ollama.py +0 -0
  169. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/openai.py +0 -0
  170. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  171. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/openrouter.py +0 -0
  172. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/auth/platforms.py +0 -0
  173. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/__init__.py +0 -0
  174. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/ids.py +0 -0
  175. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/models.py +0 -0
  176. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/store.py +0 -0
  177. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/summary.py +0 -0
  178. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/background/worker.py +0 -0
  179. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/__main__.py +0 -0
  180. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  181. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/debug.py +0 -0
  182. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/export.py +0 -0
  183. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/info.py +0 -0
  184. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/mcp.py +0 -0
  185. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/plugin.py +0 -0
  186. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/review.py +0 -0
  187. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/secscan.py +0 -0
  188. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/security_scan.py +0 -0
  189. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/skill.py +0 -0
  190. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/toad.py +0 -0
  191. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/update.py +0 -0
  192. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/vis.py +0 -0
  193. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/cli/web.py +0 -0
  194. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/config.py +0 -0
  195. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/constant.py +0 -0
  196. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/events.py +0 -0
  197. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/exception.py +0 -0
  198. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/execution_profiles.py +0 -0
  199. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/extensions.py +0 -0
  200. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/file_restore.py +0 -0
  201. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/hooks/__init__.py +0 -0
  202. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/hooks/config.py +0 -0
  203. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/hooks/engine.py +0 -0
  204. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/llm.py +0 -0
  205. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/metadata.py +0 -0
  206. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/native.py +0 -0
  207. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/__init__.py +0 -0
  208. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/llm.py +0 -0
  209. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/manager.py +0 -0
  210. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/models.py +0 -0
  211. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/notifier.py +0 -0
  212. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/store.py +0 -0
  213. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/notifications/wire.py +0 -0
  214. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/plugin/__init__.py +0 -0
  215. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/plugin/manager.py +0 -0
  216. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/plugin/tool.py +0 -0
  217. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/prompt_templates.py +0 -0
  218. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/prompts/__init__.py +0 -0
  219. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/prompts/compact.md +0 -0
  220. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/prompts/init.md +0 -0
  221. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/py.typed +0 -0
  222. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/session.py +0 -0
  223. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/session_fork.py +0 -0
  224. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/share.py +0 -0
  225. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skill/__init__.py +0 -0
  226. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  227. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  228. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  229. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skill/lockfile.py +0 -0
  230. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  231. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  232. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  233. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  234. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  235. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  236. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  237. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  238. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  239. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  240. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  241. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  242. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  243. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  244. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/__init__.py +0 -0
  245. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/agent.py +0 -0
  246. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/approval.py +0 -0
  247. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/btw.py +0 -0
  248. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/compaction.py +0 -0
  249. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/context.py +0 -0
  250. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  251. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  252. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  253. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  254. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  255. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/message.py +0 -0
  256. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/permission.py +0 -0
  257. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/soul/toolset.py +0 -0
  258. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/__init__.py +0 -0
  259. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/builder.py +0 -0
  260. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/core.py +0 -0
  261. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/git_context.py +0 -0
  262. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/output.py +0 -0
  263. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/subagents/registry.py +0 -0
  264. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  265. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/config.py +0 -0
  266. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/crash.py +0 -0
  267. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/errors.py +0 -0
  268. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  269. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/otel.py +0 -0
  270. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  271. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/telemetry/sink.py +0 -0
  272. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  273. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/__init__.py +0 -0
  274. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  275. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  276. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  277. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  278. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/background/input.md +0 -0
  279. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/background/list.md +0 -0
  280. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/background/output.md +0 -0
  281. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/background/stop.md +0 -0
  282. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/display.py +0 -0
  283. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  284. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  285. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  286. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/glob.md +0 -0
  287. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/glob.py +0 -0
  288. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/grep.md +0 -0
  289. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  290. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  291. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  292. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  293. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/replace.md +0 -0
  294. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/replace.py +0 -0
  295. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/utils.py +0 -0
  296. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/write.md +0 -0
  297. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/file/write.py +0 -0
  298. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  299. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/plan/description.md +0 -0
  300. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  301. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  302. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  303. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  304. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  305. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/skill/description.md +0 -0
  306. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/test.py +0 -0
  307. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  308. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/think/think.md +0 -0
  309. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  310. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  311. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/utils.py +0 -0
  312. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  313. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  314. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  315. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/web/search.md +0 -0
  316. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/tools/web/search.py +0 -0
  317. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/__init__.py +0 -0
  318. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  319. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  320. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  321. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  322. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  323. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  324. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  325. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  326. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  327. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  328. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  329. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/console.py +0 -0
  330. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  331. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  332. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  333. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  334. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  335. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  336. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  337. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  338. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  339. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  340. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  341. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  342. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  343. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  344. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  345. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  346. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  347. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  348. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  349. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  350. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  351. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  352. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  353. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  354. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  355. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  356. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  357. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  358. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  359. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  360. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  361. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  362. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  363. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  364. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  365. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  366. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  367. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  368. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  369. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  370. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  371. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/ui/tui_config.py +0 -0
  372. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  373. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/__init__.py +0 -0
  374. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  375. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  376. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/broadcast.py +0 -0
  377. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/changelog.py +0 -0
  378. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/clipboard.py +0 -0
  379. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/datetime.py +0 -0
  380. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/diff.py +0 -0
  381. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/editor.py +0 -0
  382. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/environment.py +0 -0
  383. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/envvar.py +0 -0
  384. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/export.py +0 -0
  385. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/file_filter.py +0 -0
  386. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  387. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/io.py +0 -0
  388. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/logging.py +0 -0
  389. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/media_tags.py +0 -0
  390. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/message.py +0 -0
  391. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/path.py +0 -0
  392. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/proctitle.py +0 -0
  393. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/proxy.py +0 -0
  394. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  395. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  396. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  397. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  398. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  399. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  400. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/sensitive.py +0 -0
  401. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/server.py +0 -0
  402. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/signals.py +0 -0
  403. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  404. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/string.py +0 -0
  405. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  406. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/term.py +0 -0
  407. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/utils/typing.py +0 -0
  408. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/__init__.py +0 -0
  409. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  410. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  411. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  412. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/api/system.py +0 -0
  413. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/app.py +0 -0
  414. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  415. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  416. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  417. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  418. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  419. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  420. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  421. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  422. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  423. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  424. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/vis/static/index.html +0 -0
  425. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/__init__.py +0 -0
  426. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/api/__init__.py +0 -0
  427. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/api/config.py +0 -0
  428. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/api/open_in.py +0 -0
  429. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/api/sessions.py +0 -0
  430. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/app.py +0 -0
  431. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/auth.py +0 -0
  432. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/models.py +0 -0
  433. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  434. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/runner/messages.py +0 -0
  435. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/runner/process.py +0 -0
  436. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/runner/worker.py +0 -0
  437. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/_headers +0 -0
  438. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  439. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  440. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  441. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  442. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  443. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  444. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  445. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  446. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  447. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  448. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  449. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  450. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  451. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  452. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  453. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  454. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  455. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  456. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  457. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  458. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  459. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  460. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  461. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  462. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  463. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  464. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  465. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  466. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  467. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  468. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  469. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  470. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  471. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  472. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  473. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  474. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  475. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  476. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  477. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  478. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  479. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  480. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  481. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  482. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  483. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  484. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  485. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  486. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  487. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  488. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  489. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  490. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  491. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  492. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  493. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  494. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  495. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  496. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  497. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  498. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  499. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  500. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  501. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  502. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  503. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  504. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  505. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  506. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  507. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  508. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  509. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  510. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  511. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  512. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  513. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  514. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  515. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  516. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  517. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  518. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  519. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  520. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  521. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  522. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  523. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  524. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  525. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  526. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  527. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  528. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  529. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  530. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  531. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  532. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  533. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  534. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  535. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  536. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  537. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  538. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  539. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  540. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  541. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  542. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  543. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  544. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  545. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  546. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  547. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  548. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  549. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  550. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  551. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  552. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  553. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  554. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  555. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  556. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  557. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  558. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  559. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  560. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  561. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  562. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  563. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  564. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  565. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  566. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  567. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  568. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  569. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  570. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  571. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  572. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  573. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  574. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  575. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  576. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  577. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  578. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  579. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  580. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  581. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  582. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  583. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  584. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  585. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  586. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  587. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  588. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  589. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  590. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  591. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  592. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  593. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  594. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  595. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  596. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  597. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  598. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  599. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  600. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  601. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  602. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  603. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  604. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  605. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  606. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  607. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  608. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  609. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  610. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  611. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  612. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  613. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  614. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  615. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  616. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  617. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  618. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  619. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  620. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  621. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  622. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  623. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  624. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  625. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  626. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  627. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  628. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  629. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  630. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  631. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  632. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  633. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  634. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  635. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  636. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  637. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  638. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  639. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  640. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  641. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  642. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  643. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  644. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  645. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  646. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  647. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  648. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  649. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  650. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  651. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  652. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  653. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  654. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  655. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  656. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  657. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  658. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  659. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  660. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  661. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  662. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  663. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  664. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  665. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  666. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  667. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  668. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  669. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  670. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  671. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  672. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  673. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  674. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  675. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  676. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  677. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  678. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  679. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  680. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  681. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  682. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  683. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  684. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  685. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  686. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  687. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  688. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  689. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  690. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  691. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  692. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  693. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  694. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  695. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  696. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  697. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  698. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  699. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  700. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  701. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  702. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  703. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  704. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  705. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  706. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  707. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  708. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  709. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  710. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  711. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  712. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  713. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  714. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  715. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  716. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  717. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  718. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  719. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  720. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  721. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  722. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  723. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  724. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  725. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  726. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  727. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  728. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  729. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  730. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  731. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  732. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  733. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  734. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  735. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  736. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  737. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  738. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  739. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  740. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  741. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  742. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  743. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  744. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  745. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  746. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  747. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  748. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  749. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  750. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  751. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  752. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  753. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  754. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  755. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  756. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  757. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  758. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  759. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  760. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  761. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  762. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  763. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  764. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  765. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  766. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  767. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  768. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  769. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  770. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  771. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  772. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  773. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  774. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  775. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  776. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  777. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  778. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  779. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  780. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  781. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  782. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  783. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  784. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  785. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  786. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  787. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  788. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  789. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  790. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  791. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  792. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  793. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  794. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  795. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  796. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  797. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  798. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  799. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  800. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  801. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  802. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  803. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  804. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  805. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  806. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  807. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  808. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  809. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  810. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  811. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  812. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  813. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  814. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  815. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  816. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  817. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  818. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  819. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  820. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  821. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  822. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  823. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  824. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/static/logo.png +0 -0
  825. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/store/__init__.py +0 -0
  826. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/web/store/sessions.py +0 -0
  827. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/__init__.py +0 -0
  828. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/file.py +0 -0
  829. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  830. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/protocol.py +0 -0
  831. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/root_hub.py +0 -0
  832. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/serde.py +0 -0
  833. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/server.py +0 -0
  834. {pythinker_code-0.15.0 → pythinker_code-0.17.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.15.0
3
+ Version: 0.17.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.15.0
118
+ ## 🆕 What's New in 0.17.0
120
119
 
121
- - **Native updater fixed for curl-bash installs.** `pythinker update` now recognizes PyInstaller-frozen `~/.local/bin/pythinker` binaries as native installs even when older onefile tarballs lack the `.pythinker-native` sentinel.
122
- - **Unix native updates pull release archives directly.** On Linux and Apple Silicon macOS, `pythinker update` downloads the matching `pythinker-0.15.0-<target>.tar.gz`, verifies its `.sha256`, and replaces the current native binary instead of trying to run `pythinker -m pip install`.
123
- - **Clearer fallback guidance.** Native update banners now point Unix users at the canonical `curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.15.0` command, while Windows still points at the native setup executable.
120
+ - **Sharper compaction continuity.** PreCompact now carries custom instructions, restores skill and hook context after compaction, triggers SessionStart after restore, and preserves the `Conversation compacted.` handoff so long sessions resume cleanly.
121
+ - **Better subagent orchestration.** Subagent specs merge inherited subagent maps, launches preserve parent-agent IDs for spawn-tree tracking, RunAgents fingerprints include agent names, and markdown agent discovery warns on unknown models instead of silently falling back.
122
+ - **Polished terminal workflow.** The shell adopts the robot-brand palette, compact transcript/agent/file-mention menus, pinned live todo activity, calmer tool output, and safer auto-backgrounding for long shell commands.
123
+ - **Release and installer hardening.** Interactive sessions show a blocking pre-start update prompt, update exits wait for acknowledgement, Homebrew publish retries package installs, and native installers gain a friendlier animated path with Windows User PATH automation.
124
+ - **Provider compatibility refresh.** Anthropic SDK support is updated for 0.101 tool-result block types so direct Anthropic sessions continue to stream tool output correctly.
124
125
 
125
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.15.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.17.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
  ---
@@ -210,15 +211,13 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
210
211
  Pythinker ships **native installers for every platform**. Pick the row that
211
212
  matches your OS — no Python, Node, or `uv` prerequisite.
212
213
 
213
- | Platform | One-line install | Artifact |
214
+ | Platform | Recommended install | Artifact source |
214
215
  |---|---|---|
215
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | native `.exe` installer |
216
- | **🍎 macOS (Apple Silicon + Intel)** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | Homebrew tap |
217
- | **🐧 Linux (Debian / Ubuntu)** | `sudo dpkg -i pythinker-code_0.15.0_amd64.deb` | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
218
- | **🐧 Linux (Fedora / RHEL)** | Download `pythinker-code-0.15.0.x86_64.rpm`, then `sudo dnf install ./pythinker-code-0.15.0.x86_64.rpm` | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
219
- | **🐧 Linux (openSUSE)** | Download `pythinker-code-0.15.0.x86_64.rpm`, then `sudo zypper install ./pythinker-code-0.15.0.x86_64.rpm` | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
220
- | **🌐 macOS / Linux — curl-bash** | `curl -fsSL https://pythinker.com/install.sh \| bash` | tarball |
221
- | **🐍 Python fallback** (universal) | `pip install pythinker-code` | PyPI |
216
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.17.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
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) |
220
+ | **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
222
221
 
223
222
  Every artifact ships with a matching `.sha256` file — verify before install on
224
223
  any platform with `sha256sum`, `shasum -a 256`, or `Get-FileHash`.
@@ -239,7 +238,7 @@ pythinker # start the interactive TUI
239
238
 
240
239
  ### 🪟 Windows — native installer
241
240
 
242
- `PythinkerSetup-0.15.0.exe` is a signed* Inno Setup wizard. Installs per-user
241
+ `PythinkerSetup-0.17.0.exe` is a signed* Inno Setup wizard. Installs per-user
243
242
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
244
243
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
245
244
  the change. **No UAC prompt.**
@@ -250,13 +249,13 @@ irm https://pythinker.com/install.ps1 | iex
250
249
 
251
250
  # Or manually download the installer + checksum from the Releases page,
252
251
  # verify with Get-FileHash, then run:
253
- .\PythinkerSetup-0.15.0.exe
252
+ .\PythinkerSetup-0.17.0.exe
254
253
 
255
254
  # Open a fresh PowerShell
256
255
  pythinker --version
257
256
  ```
258
257
 
259
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.15.0.exe /ALLUSERS`
258
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.17.0.exe /ALLUSERS`
260
259
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
261
260
 
262
261
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -273,7 +272,7 @@ the files and the PATH edit.
273
272
 
274
273
  ---
275
274
 
276
- ### 🍎 macOS — Homebrew tap
275
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew tap
277
276
 
278
277
  ```sh
279
278
  # 1. Install
@@ -299,33 +298,33 @@ auto-update; run this whenever you want the latest).
299
298
 
300
299
  ---
301
300
 
302
- ### 🐧 Linux — system packages
301
+ ### <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system packages
303
302
 
304
303
  Native `.deb` and `.rpm` packages for both `x86_64` and `aarch64` are
305
304
  attached to every GitHub Release.
306
305
 
307
306
  ```sh
308
307
  # Debian / Ubuntu (x86_64)
309
- sudo dpkg -i pythinker-code_0.15.0_amd64.deb
308
+ sudo dpkg -i pythinker-code_0.17.0_amd64.deb
310
309
  sudo apt-get install -f # only if dpkg reports missing deps
311
310
 
312
311
  # Debian / Ubuntu (ARM64)
313
- sudo dpkg -i pythinker-code_0.15.0_arm64.deb
312
+ sudo dpkg -i pythinker-code_0.17.0_arm64.deb
314
313
 
315
314
  # Fedora / RHEL / openSUSE (x86_64)
316
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.x86_64.rpm
317
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.x86_64.rpm.sha256
318
- sha256sum -c pythinker-code-0.15.0.x86_64.rpm.sha256
315
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm
316
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm.sha256
317
+ sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256
319
318
  # Fedora / RHEL:
320
- sudo dnf install ./pythinker-code-0.15.0.x86_64.rpm
319
+ sudo dnf install ./pythinker-code-0.17.0.x86_64.rpm
321
320
  # openSUSE:
322
- sudo zypper install ./pythinker-code-0.15.0.x86_64.rpm
321
+ sudo zypper install ./pythinker-code-0.17.0.x86_64.rpm
323
322
 
324
323
  # Fedora / RHEL (aarch64)
325
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.aarch64.rpm
326
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.aarch64.rpm.sha256
327
- sha256sum -c pythinker-code-0.15.0.aarch64.rpm.sha256
328
- sudo dnf install ./pythinker-code-0.15.0.aarch64.rpm
324
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm
325
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm.sha256
326
+ sha256sum -c pythinker-code-0.17.0.aarch64.rpm.sha256
327
+ sudo dnf install ./pythinker-code-0.17.0.aarch64.rpm
329
328
  ```
330
329
 
331
330
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -334,8 +333,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
334
333
  **Verify before install:**
335
334
 
336
335
  ```sh
337
- sha256sum -c pythinker-code_0.15.0_amd64.deb.sha256 # Debian/Ubuntu
338
- sha256sum -c pythinker-code-0.15.0.x86_64.rpm.sha256 # Fedora/RHEL
336
+ sha256sum -c pythinker-code_0.17.0_amd64.deb.sha256 # Debian/Ubuntu
337
+ sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256 # Fedora/RHEL
339
338
  ```
340
339
 
341
340
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -351,7 +350,7 @@ sudo rpm -e pythinker-code # Fedora/RHEL
351
350
 
352
351
  ---
353
352
 
354
- ### 🌐 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
355
354
 
356
355
  For containers, fresh VMs, or any host without a system package manager.
357
356
  The canonical `https://pythinker.com/install.sh` endpoint is backed by
@@ -365,7 +364,7 @@ at `~/.local/bin/pythinker`.
365
364
  curl -fsSL https://pythinker.com/install.sh | bash
366
365
 
367
366
  # Pin a specific version
368
- curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.15.0
367
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.17.0
369
368
 
370
369
  # Custom prefix (defaults to $HOME/.local)
371
370
  curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -386,9 +385,9 @@ Supported targets:
386
385
 
387
386
  | `uname -s / -m` | Tarball asset |
388
387
  |---|---|
389
- | Linux / x86_64 | `pythinker-0.15.0-x86_64-unknown-linux-gnu.tar.gz` |
390
- | Linux / aarch64 | `pythinker-0.15.0-aarch64-unknown-linux-gnu.tar.gz` |
391
- | Darwin / arm64 | `pythinker-0.15.0-aarch64-apple-darwin.tar.gz` |
388
+ | Linux / x86_64 | `pythinker-0.17.0-x86_64-unknown-linux-gnu.tar.gz` |
389
+ | Linux / aarch64 | `pythinker-0.17.0-aarch64-unknown-linux-gnu.tar.gz` |
390
+ | Darwin / arm64 | `pythinker-0.17.0-aarch64-apple-darwin.tar.gz` |
392
391
 
393
392
  The script prints PATH guidance if `~/.local/bin` isn't already on your
394
393
  `$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
@@ -396,34 +395,16 @@ no PyInstaller-built Intel Darwin binary is published.
396
395
 
397
396
  **Uninstall:** `rm ~/.local/bin/pythinker`.
398
397
 
399
- ### 🛠 Power-user / legacy install paths
398
+ ### 🐍 Python fallback
400
399
 
401
- > 🚧 **Deprecated.** These paths still work, but the per-OS native installers
402
- > above are the canonical install method for **all new releases**. The legacy
403
- > options below remain for existing automation; new tooling, examples, and
404
- > support docs target the native installers exclusively.
405
-
406
- <details>
407
- <summary>Legacy shell-script wrappers + uv / pipx</summary>
400
+ Use the Python package only when a native installer is not available for your
401
+ environment:
408
402
 
409
403
  ```sh
410
- # Compatibility shim to the native installer
411
- scripts/install.sh
412
- # Windows PowerShell native installer bootstrap:
413
- powershell -c "irm https://pythinker.com/install.ps1 | iex"
414
-
415
- # Legacy: one-off run via uvx
416
- uvx pythinker-code
417
-
418
- # Legacy: install as a uv tool
419
- uv tool install pythinker-code
420
-
421
- # Legacy: PyPI directly (universal fallback)
422
404
  pip install pythinker-code
423
- pipx install pythinker-code
424
405
  ```
425
406
 
426
- </details>
407
+ Native installs remain the supported path for new users and for in-app updates.
427
408
 
428
409
  ### 🔐 Authenticate (optional)
429
410
 
@@ -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.15.0
53
+ ## 🆕 What's New in 0.17.0
55
54
 
56
- - **Native updater fixed for curl-bash installs.** `pythinker update` now recognizes PyInstaller-frozen `~/.local/bin/pythinker` binaries as native installs even when older onefile tarballs lack the `.pythinker-native` sentinel.
57
- - **Unix native updates pull release archives directly.** On Linux and Apple Silicon macOS, `pythinker update` downloads the matching `pythinker-0.15.0-<target>.tar.gz`, verifies its `.sha256`, and replaces the current native binary instead of trying to run `pythinker -m pip install`.
58
- - **Clearer fallback guidance.** Native update banners now point Unix users at the canonical `curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.15.0` command, while Windows still points at the native setup executable.
55
+ - **Sharper compaction continuity.** PreCompact now carries custom instructions, restores skill and hook context after compaction, triggers SessionStart after restore, and preserves the `Conversation compacted.` handoff so long sessions resume cleanly.
56
+ - **Better subagent orchestration.** Subagent specs merge inherited subagent maps, launches preserve parent-agent IDs for spawn-tree tracking, RunAgents fingerprints include agent names, and markdown agent discovery warns on unknown models instead of silently falling back.
57
+ - **Polished terminal workflow.** The shell adopts the robot-brand palette, compact transcript/agent/file-mention menus, pinned live todo activity, calmer tool output, and safer auto-backgrounding for long shell commands.
58
+ - **Release and installer hardening.** Interactive sessions show a blocking pre-start update prompt, update exits wait for acknowledgement, Homebrew publish retries package installs, and native installers gain a friendlier animated path with Windows User PATH automation.
59
+ - **Provider compatibility refresh.** Anthropic SDK support is updated for 0.101 tool-result block types so direct Anthropic sessions continue to stream tool output correctly.
59
60
 
60
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.15.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.17.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
  ---
@@ -145,15 +146,13 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
145
146
  Pythinker ships **native installers for every platform**. Pick the row that
146
147
  matches your OS — no Python, Node, or `uv` prerequisite.
147
148
 
148
- | Platform | One-line install | Artifact |
149
+ | Platform | Recommended install | Artifact source |
149
150
  |---|---|---|
150
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | native `.exe` installer |
151
- | **🍎 macOS (Apple Silicon + Intel)** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | Homebrew tap |
152
- | **🐧 Linux (Debian / Ubuntu)** | `sudo dpkg -i pythinker-code_0.15.0_amd64.deb` | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
153
- | **🐧 Linux (Fedora / RHEL)** | Download `pythinker-code-0.15.0.x86_64.rpm`, then `sudo dnf install ./pythinker-code-0.15.0.x86_64.rpm` | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
154
- | **🐧 Linux (openSUSE)** | Download `pythinker-code-0.15.0.x86_64.rpm`, then `sudo zypper install ./pythinker-code-0.15.0.x86_64.rpm` | [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
155
- | **🌐 macOS / Linux — curl-bash** | `curl -fsSL https://pythinker.com/install.sh \| bash` | tarball |
156
- | **🐍 Python fallback** (universal) | `pip install pythinker-code` | PyPI |
151
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.17.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
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) |
155
+ | **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
157
156
 
158
157
  Every artifact ships with a matching `.sha256` file — verify before install on
159
158
  any platform with `sha256sum`, `shasum -a 256`, or `Get-FileHash`.
@@ -174,7 +173,7 @@ pythinker # start the interactive TUI
174
173
 
175
174
  ### 🪟 Windows — native installer
176
175
 
177
- `PythinkerSetup-0.15.0.exe` is a signed* Inno Setup wizard. Installs per-user
176
+ `PythinkerSetup-0.17.0.exe` is a signed* Inno Setup wizard. Installs per-user
178
177
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
179
178
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
180
179
  the change. **No UAC prompt.**
@@ -185,13 +184,13 @@ irm https://pythinker.com/install.ps1 | iex
185
184
 
186
185
  # Or manually download the installer + checksum from the Releases page,
187
186
  # verify with Get-FileHash, then run:
188
- .\PythinkerSetup-0.15.0.exe
187
+ .\PythinkerSetup-0.17.0.exe
189
188
 
190
189
  # Open a fresh PowerShell
191
190
  pythinker --version
192
191
  ```
193
192
 
194
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.15.0.exe /ALLUSERS`
193
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.17.0.exe /ALLUSERS`
195
194
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
196
195
 
197
196
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -208,7 +207,7 @@ the files and the PATH edit.
208
207
 
209
208
  ---
210
209
 
211
- ### 🍎 macOS — Homebrew tap
210
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew tap
212
211
 
213
212
  ```sh
214
213
  # 1. Install
@@ -234,33 +233,33 @@ auto-update; run this whenever you want the latest).
234
233
 
235
234
  ---
236
235
 
237
- ### 🐧 Linux — system packages
236
+ ### <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system packages
238
237
 
239
238
  Native `.deb` and `.rpm` packages for both `x86_64` and `aarch64` are
240
239
  attached to every GitHub Release.
241
240
 
242
241
  ```sh
243
242
  # Debian / Ubuntu (x86_64)
244
- sudo dpkg -i pythinker-code_0.15.0_amd64.deb
243
+ sudo dpkg -i pythinker-code_0.17.0_amd64.deb
245
244
  sudo apt-get install -f # only if dpkg reports missing deps
246
245
 
247
246
  # Debian / Ubuntu (ARM64)
248
- sudo dpkg -i pythinker-code_0.15.0_arm64.deb
247
+ sudo dpkg -i pythinker-code_0.17.0_arm64.deb
249
248
 
250
249
  # Fedora / RHEL / openSUSE (x86_64)
251
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.x86_64.rpm
252
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.x86_64.rpm.sha256
253
- sha256sum -c pythinker-code-0.15.0.x86_64.rpm.sha256
250
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm
251
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.x86_64.rpm.sha256
252
+ sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256
254
253
  # Fedora / RHEL:
255
- sudo dnf install ./pythinker-code-0.15.0.x86_64.rpm
254
+ sudo dnf install ./pythinker-code-0.17.0.x86_64.rpm
256
255
  # openSUSE:
257
- sudo zypper install ./pythinker-code-0.15.0.x86_64.rpm
256
+ sudo zypper install ./pythinker-code-0.17.0.x86_64.rpm
258
257
 
259
258
  # Fedora / RHEL (aarch64)
260
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.aarch64.rpm
261
- curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.15.0/pythinker-code-0.15.0.aarch64.rpm.sha256
262
- sha256sum -c pythinker-code-0.15.0.aarch64.rpm.sha256
263
- sudo dnf install ./pythinker-code-0.15.0.aarch64.rpm
259
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm
260
+ curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.17.0/pythinker-code-0.17.0.aarch64.rpm.sha256
261
+ sha256sum -c pythinker-code-0.17.0.aarch64.rpm.sha256
262
+ sudo dnf install ./pythinker-code-0.17.0.aarch64.rpm
264
263
  ```
265
264
 
266
265
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -269,8 +268,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
269
268
  **Verify before install:**
270
269
 
271
270
  ```sh
272
- sha256sum -c pythinker-code_0.15.0_amd64.deb.sha256 # Debian/Ubuntu
273
- sha256sum -c pythinker-code-0.15.0.x86_64.rpm.sha256 # Fedora/RHEL
271
+ sha256sum -c pythinker-code_0.17.0_amd64.deb.sha256 # Debian/Ubuntu
272
+ sha256sum -c pythinker-code-0.17.0.x86_64.rpm.sha256 # Fedora/RHEL
274
273
  ```
275
274
 
276
275
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -286,7 +285,7 @@ sudo rpm -e pythinker-code # Fedora/RHEL
286
285
 
287
286
  ---
288
287
 
289
- ### 🌐 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
290
289
 
291
290
  For containers, fresh VMs, or any host without a system package manager.
292
291
  The canonical `https://pythinker.com/install.sh` endpoint is backed by
@@ -300,7 +299,7 @@ at `~/.local/bin/pythinker`.
300
299
  curl -fsSL https://pythinker.com/install.sh | bash
301
300
 
302
301
  # Pin a specific version
303
- curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.15.0
302
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.17.0
304
303
 
305
304
  # Custom prefix (defaults to $HOME/.local)
306
305
  curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -321,9 +320,9 @@ Supported targets:
321
320
 
322
321
  | `uname -s / -m` | Tarball asset |
323
322
  |---|---|
324
- | Linux / x86_64 | `pythinker-0.15.0-x86_64-unknown-linux-gnu.tar.gz` |
325
- | Linux / aarch64 | `pythinker-0.15.0-aarch64-unknown-linux-gnu.tar.gz` |
326
- | Darwin / arm64 | `pythinker-0.15.0-aarch64-apple-darwin.tar.gz` |
323
+ | Linux / x86_64 | `pythinker-0.17.0-x86_64-unknown-linux-gnu.tar.gz` |
324
+ | Linux / aarch64 | `pythinker-0.17.0-aarch64-unknown-linux-gnu.tar.gz` |
325
+ | Darwin / arm64 | `pythinker-0.17.0-aarch64-apple-darwin.tar.gz` |
327
326
 
328
327
  The script prints PATH guidance if `~/.local/bin` isn't already on your
329
328
  `$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
@@ -331,34 +330,16 @@ no PyInstaller-built Intel Darwin binary is published.
331
330
 
332
331
  **Uninstall:** `rm ~/.local/bin/pythinker`.
333
332
 
334
- ### 🛠 Power-user / legacy install paths
333
+ ### 🐍 Python fallback
335
334
 
336
- > 🚧 **Deprecated.** These paths still work, but the per-OS native installers
337
- > above are the canonical install method for **all new releases**. The legacy
338
- > options below remain for existing automation; new tooling, examples, and
339
- > support docs target the native installers exclusively.
340
-
341
- <details>
342
- <summary>Legacy shell-script wrappers + uv / pipx</summary>
335
+ Use the Python package only when a native installer is not available for your
336
+ environment:
343
337
 
344
338
  ```sh
345
- # Compatibility shim to the native installer
346
- scripts/install.sh
347
- # Windows PowerShell native installer bootstrap:
348
- powershell -c "irm https://pythinker.com/install.ps1 | iex"
349
-
350
- # Legacy: one-off run via uvx
351
- uvx pythinker-code
352
-
353
- # Legacy: install as a uv tool
354
- uv tool install pythinker-code
355
-
356
- # Legacy: PyPI directly (universal fallback)
357
339
  pip install pythinker-code
358
- pipx install pythinker-code
359
340
  ```
360
341
 
361
- </details>
342
+ Native installs remain the supported path for new users and for in-app updates.
362
343
 
363
344
  ### 🔐 Authenticate (optional)
364
345
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.15.0"
3
+ version = "0.17.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,28 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.17.0 (2026-05-25)
19
+
20
+ ### What changed in this release
21
+
22
+ - **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.
23
+ - **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.
24
+ - **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.
25
+ - **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.
26
+ - **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.
27
+
28
+ 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).
29
+
30
+ ## 0.16.0 (2026-05-24)
31
+
32
+ ### What changed in this release
33
+
34
+ - **Standardized native install docs across platforms.** README Quick Start now presents one canonical Windows command (`irm https://pythinker.com/install.ps1 | iex`) and one canonical macOS/Linux command (`curl -fsSL https://pythinker.com/install.sh | bash`) before package-manager/manual alternatives.
35
+ - **Removed old local installer guidance.** User-facing docs no longer advertise legacy local shell wrappers or Python-tool manager shortcuts. `pip install pythinker-code==0.16.0` remains as the universal Python fallback and release-gate snippet.
36
+ - **Aligned release artifact instructions.** Manual Windows, Linux package, and tarball sections all point at `0.16.0` GitHub Release assets and keep SHA-256 verification explicit.
37
+
38
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.16.0`, or use the native installer for your OS (see the README install table).
39
+
18
40
  ## 0.15.0 (2026-05-24)
19
41
 
20
42
  ### What changed in this release
@@ -22,9 +22,9 @@ The user's messages may contain questions and/or task descriptions in natural la
22
22
 
23
23
  When handling the user's request, if it involves creating, modifying, or running code or files, you MUST use the appropriate tools (e.g., `WriteFile`, `Shell`) to make actual changes — do not just describe the solution in text. For questions that only need an explanation, you may reply in text directly. When calling tools, do not provide explanations because the tool calls themselves should be self-explanatory. You MUST follow the description of each tool and its parameters when calling tools.
24
24
 
25
- If the `Agent` tool is available, you can use it to delegate a focused subtask to a subagent instance. Treat subagents as focused roles, not just extra capacity: use `explore` for read-only mapping, `plan` for strategy, `coder` or `implementer` for scoped edits, `review` for severity-scored critique, and `verifier` for validation gates. The tool can either start a new instance or resume an existing one by `agent_id`. Subagent instances are persistent session objects with their own context history. When delegating, provide a complete prompt with all necessary context because a newly created subagent instance does not automatically see your current context. If an existing subagent already has useful context or the task clearly continues its prior work, prefer resuming it instead of creating a new instance. Default to foreground subagents. Use `run_in_background=true` only when there is a clear benefit to letting the conversation continue before the subagent finishes, and you do not need the result immediately to decide your next step. Spawn multiple subagents in the same turn when they can investigate independent regions concurrently.
25
+ If the `Agent` tool is available, you can use it to delegate a focused subtask to a subagent instance. Treat subagents as focused roles, not just extra capacity: use `explore` for read-only mapping, `plan` for strategy, `coder` or `implementer` for scoped edits, `review` for severity-scored critique, and `verifier` for validation gates. The tool can either start a new instance or resume an existing one by `agent_id`. Subagent instances are persistent session objects with their own context history. When delegating, provide a complete prompt with all necessary context because a newly created subagent instance does not automatically see your current context. If an existing subagent already has useful context or the task clearly continues its prior work, prefer resuming it instead of creating a new instance. Default to foreground subagents. Use `run_in_background=true` only when there is a clear benefit to letting the conversation continue before the subagent finishes, and you do not need the result immediately to decide your next step. Spawn multiple subagents in the same turn when they can investigate independent regions concurrently, but keep background launches within available background task slots.
26
26
 
27
- If the `RunAgents` tool is available, prefer it over repeated one-by-one `Agent` calls for bounded map-reduce work: parallel scouting, independent review plus verification, or scout/plan/implement/review batches. Keep each child prompt focused and include a shared `base_prompt` with the user goal, repository constraints, and required output format.
27
+ If the `RunAgents` tool is available, prefer it over repeated one-by-one `Agent` calls for bounded map-reduce work: parallel scouting, independent review plus verification, or scout/plan/implement/review batches. Keep each child prompt focused and include a shared `base_prompt` with the user goal, repository constraints, and required output format. In background mode, never request more children than available background task slots; split larger maps into smaller batches or set `run_in_background=false` for sequential foreground execution.
28
28
 
29
29
  If the `ReadSkill` tool is available, use it to load the exact instructions for a relevant workflow skill before applying that workflow. This is especially important for `review-pr`, `diagnose-ci-failures`, `fix-errors`, `implement-specs`, `spec-driven-implementation`, `check-impl-against-spec`, `resolve-merge-conflicts`, and `create-pr`.
30
30
 
@@ -158,6 +158,15 @@ def _load_agent_spec(agent_file: Path) -> AgentSpec:
158
158
  if not isinstance(agent_spec.exclude_tools, Inherit):
159
159
  base_agent_spec.exclude_tools = agent_spec.exclude_tools
160
160
  if not isinstance(agent_spec.subagents, Inherit):
161
- base_agent_spec.subagents = agent_spec.subagents
161
+ if isinstance(agent_spec.subagents, dict) and isinstance(
162
+ base_agent_spec.subagents, dict
163
+ ):
164
+ # Child entries WIN on key conflicts; base entries fill the rest.
165
+ base_agent_spec.subagents = {
166
+ **base_agent_spec.subagents,
167
+ **agent_spec.subagents,
168
+ }
169
+ else:
170
+ base_agent_spec.subagents = agent_spec.subagents
162
171
  agent_spec = base_agent_spec
163
172
  return agent_spec
@@ -735,15 +735,6 @@ class PythinkerCLI:
735
735
  """Run the Pythinker CLI instance with shell UI."""
736
736
  from pythinker_code.ui.shell import Shell, WelcomeInfoItem
737
737
 
738
- if command is None:
739
- from pythinker_code.ui.shell.update import (
740
- print_update_banner,
741
- schedule_auto_update_check,
742
- )
743
-
744
- print_update_banner()
745
- schedule_auto_update_check()
746
-
747
738
  work_dir = self._runtime.session.work_dir
748
739
  welcome_info = [
749
740
  WelcomeInfoItem(name="Directory", value=str(shorten_home(work_dir))),
@@ -15,7 +15,11 @@ from pythinker_code.soul import RunCancelled
15
15
  from pythinker_code.subagents.builder import SubagentBuilder
16
16
  from pythinker_code.subagents.core import SubagentRunSpec, prepare_soul
17
17
  from pythinker_code.subagents.output import SubagentOutputWriter
18
- from pythinker_code.subagents.runner import run_with_summary_continuation
18
+ from pythinker_code.subagents.runner import (
19
+ _SUMMARY_MIN_LENGTH_BY_TYPE,
20
+ _SUMMARY_MIN_LENGTH_DEFAULT,
21
+ run_with_summary_continuation,
22
+ )
19
23
  from pythinker_code.utils.logging import logger
20
24
  from pythinker_code.wire import Wire
21
25
 
@@ -160,6 +164,8 @@ class BackgroundAgentRunner:
160
164
  self._runtime.subagent_store,
161
165
  on_stage=output.stage,
162
166
  )
167
+ if self._runtime.hook_engine is not None:
168
+ soul.set_hook_engine(self._runtime.hook_engine)
163
169
 
164
170
  async def _ui_loop_fn(wire: Wire) -> None:
165
171
  wire_ui = wire.ui_side(merge=True)
@@ -173,6 +179,9 @@ class BackgroundAgentRunner:
173
179
  prompt,
174
180
  _ui_loop_fn,
175
181
  self._runtime.subagent_store.wire_path(self._agent_id),
182
+ min_length=_SUMMARY_MIN_LENGTH_BY_TYPE.get(
183
+ self._subagent_type, _SUMMARY_MIN_LENGTH_DEFAULT
184
+ ),
176
185
  )
177
186
  if failure is not None:
178
187
  self._manager._mark_task_failed(self._task_id, failure.message)
@@ -94,6 +94,14 @@ class BackgroundTaskManager:
94
94
  1 for view in self._store.list_views() if not is_terminal_status(view.runtime.status)
95
95
  )
96
96
 
97
+ def active_task_count(self) -> int:
98
+ """Return the number of non-terminal background tasks."""
99
+ return self._active_task_count()
100
+
101
+ def available_task_slots(self) -> int:
102
+ """Return how many new background tasks can be started right now."""
103
+ return max(0, self._config.max_running_tasks - self._active_task_count())
104
+
97
105
  def has_active_tasks(self) -> bool:
98
106
  """Return True if any background tasks are in a non-terminal status.
99
107
 
@@ -941,6 +941,11 @@ def pythinker(
941
941
  await _delete_empty_session(_latest_created_session)
942
942
  raise
943
943
 
944
+ if ui == "shell" and prompt is None:
945
+ from pythinker_code.ui.shell.update import prompt_pre_start_update
946
+
947
+ asyncio.run(prompt_pre_start_update())
948
+
944
949
  if _picker_mode:
945
950
  from prompt_toolkit.shortcuts.choice_input import ChoiceInput
946
951
  from rich.console import Console
@@ -148,11 +148,13 @@ def pre_compact(
148
148
  cwd: str,
149
149
  trigger: str,
150
150
  token_count: int,
151
+ custom_instructions: str = "",
151
152
  ) -> dict[str, Any]:
152
153
  return {
153
154
  **_base("PreCompact", session_id, cwd),
154
155
  "trigger": trigger,
155
156
  "token_count": token_count,
157
+ "custom_instructions": custom_instructions,
156
158
  }
157
159
 
158
160
 
@@ -162,11 +164,13 @@ def post_compact(
162
164
  cwd: str,
163
165
  trigger: str,
164
166
  estimated_token_count: int,
167
+ compact_summary: str = "",
165
168
  ) -> dict[str, Any]:
166
169
  return {
167
170
  **_base("PostCompact", session_id, cwd),
168
171
  "trigger": trigger,
169
172
  "estimated_token_count": estimated_token_count,
173
+ "compact_summary": compact_summary,
170
174
  }
171
175
 
172
176