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