pythinker-code 0.41.0__tar.gz → 0.42.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 (918) hide show
  1. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/PKG-INFO +33 -25
  2. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/README.md +32 -24
  3. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/CHANGELOG.md +21 -0
  5. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/host.py +4 -2
  6. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/tools.py +8 -0
  7. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/system.md +2 -2
  8. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/app.py +26 -2
  9. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/agent_runner.py +78 -0
  10. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/manager.py +1 -0
  11. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/config.py +188 -5
  12. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/llm.py +1 -1
  13. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/plugin/tool.py +13 -1
  14. pythinker_code-0.42.0/src/pythinker_code/project_trust.py +157 -0
  15. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/agent.py +40 -6
  16. pythinker_code-0.42.0/src/pythinker_code/soul/api_errors.py +61 -0
  17. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/approval.py +8 -0
  18. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/compaction.py +115 -23
  19. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/context.py +62 -1
  20. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +9 -5
  21. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +2 -2
  22. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/orchestration.py +129 -0
  23. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/permissions_state.py +100 -0
  24. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +27 -2
  25. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/flow_runner.py +1 -1
  26. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/permission.py +189 -8
  27. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/pythinkersoul.py +102 -53
  28. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/slash.py +3 -7
  29. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/toolset.py +220 -21
  30. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/builder.py +16 -0
  31. pythinker_code-0.42.0/src/pythinker_code/subagents/core.py +173 -0
  32. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/git_context.py +28 -3
  33. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/runner.py +28 -0
  34. pythinker_code-0.42.0/src/pythinker_code/subagents/worktree.py +165 -0
  35. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/thinking.py +2 -2
  36. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/agent/__init__.py +51 -11
  37. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/__init__.py +2 -0
  38. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/glob.py +1 -0
  39. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/grep_local.py +2 -0
  40. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read.py +8 -1
  41. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read_media.py +1 -0
  42. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/replace.py +122 -1
  43. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/write.py +8 -1
  44. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/__init__.py +2 -0
  45. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/memory/__init__.py +1 -1
  46. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/recall/__init__.py +3 -2
  47. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/shell/__init__.py +42 -16
  48. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/think/__init__.py +1 -0
  49. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/todo/__init__.py +2 -2
  50. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/fetch.py +14 -4
  51. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/search.py +1 -0
  52. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/print/__init__.py +50 -8
  53. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/__init__.py +73 -7
  54. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/bash_execution.py +1 -1
  55. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/markdown.py +2 -2
  56. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/render_utils.py +1 -1
  57. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/mcp_status.py +7 -0
  58. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/prompt.py +1 -1
  59. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/slash.py +73 -3
  60. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/spinner_words.py +5 -5
  61. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats_pricing.py +1 -1
  62. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tips.py +1 -1
  63. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/update.py +138 -32
  64. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +13 -0
  65. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +1 -1
  66. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +21 -2
  67. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/export.py +8 -2
  68. pythinker_code-0.42.0/src/pythinker_code/utils/sensitive.py +104 -0
  69. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/arc-Bq1ATrqd.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/arc-CJHzrKlH.js +1 -1
  70. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-DTprl7ZG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-DNC_zoAn.js +1 -1
  71. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-r3XPfPkk.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-B8cK1eXd.js +1 -1
  72. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-cPPpW6xv.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-BB57yVeM.js +1 -1
  73. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/channel-DAFbWj2j.js +1 -0
  74. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-zRVGxC0q.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-CGMsIeP3.js +1 -1
  75. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-Df3UXYL-.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-Dw9eayK9.js +1 -1
  76. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BhlNOYb-.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CFBqBKAl.js +1 -1
  77. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-CzIeTXuz.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-BAZYOPOM.js +1 -1
  78. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Dgpkacqq.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-B9ZVJUy1.js +1 -1
  79. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BjcsjcLg.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DDbJIEeu.js +1 -1
  80. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-DAeOipxY.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-FGNVk4We.js +1 -1
  81. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-yGHvHknR.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Py4-vxnG.js +1 -1
  82. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-CcSvd4Qw.js +1 -0
  83. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-CcSvd4Qw.js +1 -0
  84. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DYXvo0FV.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-C1IrEtmM.js +1 -1
  85. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DVVn2pTZ.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-ulfskTKs.js +1 -1
  86. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/cytoscape.esm-CUFrfDxQ.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/cytoscape.esm-CKJzb6jC.js +1 -1
  87. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-D2YXTLlG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DDOrrUUp.js +1 -1
  88. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-INpKnNH3.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-omiVVlh-.js +1 -1
  89. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-BksnalpB.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL--WZ-sbyB.js +1 -1
  90. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-DB2x9kaC.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-DuJkH_Dp.js +1 -1
  91. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-D6pxKOq8.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-Dwh8l5yN.js +1 -1
  92. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-CIJx3svR.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-BBESBcOZ.js +1 -1
  93. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-CUh8dOLf.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-C6A8f555.js +1 -1
  94. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-BlQ_sCWm.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DrG2uPK8.js +1 -1
  95. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DHevRSWI.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-CzTDX_le.js +1 -1
  96. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-CB8ALgrH.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-Mfvyr5ag.js +1 -1
  97. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/graph-DF8UbLYG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/graph-DWkqPwS6.js +1 -1
  98. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/index-CmNjQYCu.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-B9YPynda.js +2 -2
  99. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/index-DlMxD2kw.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-CrbQ2iCP.js +1 -1
  100. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/index-CvBMXPz4.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-DFGZedSa.js +1 -1
  101. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-1K-WkM8D.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DpW1lQOl.js +1 -1
  102. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BYwQF8M6.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-oSY-FAVt.js +1 -1
  103. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-Dh25bGE8.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-BwYhSdLB.js +1 -1
  104. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-BcReiEP0.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-CG-YrkGS.js +1 -1
  105. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/layout-CJzXa1Ed.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/layout-D0mYdmsS.js +1 -1
  106. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/linear-p3G2bC46.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/linear-iesh3Eu0.js +1 -1
  107. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DOGBldyD.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DWNL9FgP.js +7 -7
  108. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/mermaid.core-_-S_2Yi-.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mermaid.core-DhY_x5WF.js +5 -5
  109. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-VUOLy8fG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DsOe4v7I.js +1 -1
  110. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-Bi91s1ny.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CGyoRO4_.js +1 -1
  111. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-CAf-Hn6l.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Cj2chRtB.js +1 -1
  112. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-CCeiXrEd.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-DVv27OEE.js +1 -1
  113. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-B73Lr4Ze.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-BQILqDse.js +1 -1
  114. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-BXl-fQnH.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-6egz85VI.js +1 -1
  115. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DfMe08Zi.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DBJgV7Cm.js +1 -1
  116. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CQRzQ8b4.js +1 -0
  117. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-_AdPAzzm.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-le8BJ0A-.js +1 -1
  118. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-CUN2oJ2s.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Bjl4nmfL.js +1 -1
  119. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CNtCn056.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CQ9olIGT.js +1 -1
  120. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-CoQZgADy.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-COpN0Kqp.js +1 -1
  121. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-CbezmMpk.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DLwkPLC8.js +1 -1
  122. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/index.html +1 -1
  123. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/types.py +2 -0
  124. pythinker_code-0.41.0/src/pythinker_code/subagents/core.py +0 -103
  125. pythinker_code-0.41.0/src/pythinker_code/utils/sensitive.py +0 -55
  126. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/channel-5SEz47Z3.js +0 -1
  127. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-B_fsYv4N.js +0 -1
  128. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-B_fsYv4N.js +0 -1
  129. pythinker_code-0.41.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-DBt1mpR0.js +0 -1
  130. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/LICENSE +0 -0
  131. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/NOTICE +0 -0
  132. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/__init__.py +0 -0
  133. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/__main__.py +0 -0
  134. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  135. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/__init__.py +0 -0
  136. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/convert.py +0 -0
  137. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/mcp.py +0 -0
  138. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/server.py +0 -0
  139. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/session.py +0 -0
  140. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/types.py +0 -0
  141. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/version.py +0 -0
  142. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  143. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
  144. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  145. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  146. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
  147. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  148. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  149. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  150. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  151. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  152. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
  153. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  154. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
  155. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  156. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  157. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  158. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agentspec.py +0 -0
  159. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  160. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  161. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  162. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/__init__.py +0 -0
  163. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/alibaba.py +0 -0
  164. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  165. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  166. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/deepseek.py +0 -0
  167. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  168. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  169. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/minimax.py +0 -0
  170. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/moonshot.py +0 -0
  171. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/oauth.py +0 -0
  172. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/ollama.py +0 -0
  173. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  174. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  175. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  176. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  177. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  178. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  179. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/login.py +0 -0
  180. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/models.py +0 -0
  181. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
  182. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  183. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openrouter.py +0 -0
  184. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/platforms.py +0 -0
  185. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/z_ai.py +0 -0
  186. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/__init__.py +0 -0
  187. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/ids.py +0 -0
  188. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/models.py +0 -0
  189. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/store.py +0 -0
  190. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/summary.py +0 -0
  191. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/worker.py +0 -0
  192. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/__init__.py +0 -0
  193. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/__main__.py +0 -0
  194. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  195. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/debug.py +0 -0
  196. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/export.py +0 -0
  197. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/info.py +0 -0
  198. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/mcp.py +0 -0
  199. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/plugin.py +0 -0
  200. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/review.py +0 -0
  201. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/secscan.py +0 -0
  202. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/security_scan.py +0 -0
  203. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/skill.py +0 -0
  204. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/toad.py +0 -0
  205. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/update.py +0 -0
  206. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/vis.py +0 -0
  207. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/web.py +0 -0
  208. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/constant.py +0 -0
  209. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/events.py +0 -0
  210. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/exception.py +0 -0
  211. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/execution_profiles.py +0 -0
  212. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/extensions.py +0 -0
  213. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/feedback.py +0 -0
  214. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/feedback_repo.py +0 -0
  215. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/file_restore.py +0 -0
  216. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/__init__.py +0 -0
  217. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/config.py +0 -0
  218. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/engine.py +0 -0
  219. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/events.py +0 -0
  220. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/runner.py +0 -0
  221. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/__init__.py +0 -0
  222. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/consolidation.py +0 -0
  223. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/harvest.py +0 -0
  224. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/recall.py +0 -0
  225. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/recap.py +0 -0
  226. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/retriever.py +0 -0
  227. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/sanitize.py +0 -0
  228. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/metadata.py +0 -0
  229. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/models_dev.py +0 -0
  230. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/native.py +0 -0
  231. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/__init__.py +0 -0
  232. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/llm.py +0 -0
  233. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/manager.py +0 -0
  234. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/models.py +0 -0
  235. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/notifier.py +0 -0
  236. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/store.py +0 -0
  237. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/wire.py +0 -0
  238. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/plugin/__init__.py +0 -0
  239. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/plugin/manager.py +0 -0
  240. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/project_memory.py +0 -0
  241. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompt_templates.py +0 -0
  242. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/__init__.py +0 -0
  243. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/best_practices.md +0 -0
  244. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/compact.md +0 -0
  245. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
  246. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/goal_set.md +0 -0
  247. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
  248. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/init.md +0 -0
  249. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/learn.md +0 -0
  250. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/py.typed +0 -0
  251. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/scratchpad.py +0 -0
  252. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session.py +0 -0
  253. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_cleanup.py +0 -0
  254. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_fork.py +0 -0
  255. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_recap.py +0 -0
  256. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_state.py +0 -0
  257. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/share.py +0 -0
  258. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/__init__.py +0 -0
  259. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  260. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  261. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  262. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/lockfile.py +0 -0
  263. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  264. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  265. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  266. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  267. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  268. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  269. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  270. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  271. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  272. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  273. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  274. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  275. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  276. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  277. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  278. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  279. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/__init__.py +0 -0
  280. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/btw.py +0 -0
  281. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  282. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/deliberation.py +0 -0
  283. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  284. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  285. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  286. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  287. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
  288. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/message.py +0 -0
  289. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/__init__.py +0 -0
  290. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/codenames.py +0 -0
  291. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/discovery.py +0 -0
  292. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/models.py +0 -0
  293. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/output.py +0 -0
  294. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/registry.py +0 -0
  295. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/store.py +0 -0
  296. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/usage.py +0 -0
  297. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  298. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/config.py +0 -0
  299. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/crash.py +0 -0
  300. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/errors.py +0 -0
  301. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  302. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/otel.py +0 -0
  303. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  304. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/sink.py +0 -0
  305. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  306. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/__init__.py +0 -0
  307. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/agent/description.md +0 -0
  308. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  309. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  310. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  311. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/input.md +0 -0
  312. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/list.md +0 -0
  313. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/output.md +0 -0
  314. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/stop.md +0 -0
  315. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/display.py +0 -0
  316. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  317. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  318. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  319. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/glob.md +0 -0
  320. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/grep.md +0 -0
  321. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  322. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read.md +0 -0
  323. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  324. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/replace.md +0 -0
  325. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/utils.py +0 -0
  326. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/write.md +0 -0
  327. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
  328. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
  329. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  330. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  331. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  332. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  333. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/description.md +0 -0
  334. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  335. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  336. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  337. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  338. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  339. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/progress/description.md +0 -0
  340. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/recall/description.md +0 -0
  341. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  342. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  343. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  344. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  345. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  346. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/skill/description.md +0 -0
  347. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  348. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  349. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/test.py +0 -0
  350. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/think/think.md +0 -0
  351. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  352. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/utils.py +0 -0
  353. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  354. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  355. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  356. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/search.md +0 -0
  357. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/__init__.py +0 -0
  358. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  359. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/color_utils.py +0 -0
  360. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  361. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  362. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  363. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  364. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  365. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  366. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  367. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  368. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  369. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  370. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  371. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  372. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  373. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  374. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/console.py +0 -0
  375. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  376. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  377. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  378. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  379. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  380. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  381. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  382. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  383. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  384. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  385. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  386. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  387. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  388. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  389. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  390. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  391. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  392. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  393. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  394. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  395. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  396. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  397. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  398. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  399. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  400. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  401. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  402. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
  403. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
  404. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  405. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  406. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  407. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  408. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  409. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  410. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  411. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  412. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  413. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  414. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  415. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  416. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  417. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  418. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  419. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  420. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  421. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  422. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  423. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  424. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  425. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  426. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  427. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  428. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  429. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  430. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  431. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  432. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  433. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  434. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  435. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  436. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  437. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  438. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  439. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  440. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  441. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  442. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  443. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  444. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  445. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  446. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  447. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/terminal_background.py +0 -0
  448. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  449. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/theme.py +0 -0
  450. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/tui_config.py +0 -0
  451. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  452. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/__init__.py +0 -0
  453. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  454. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  455. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/artifacts.py +0 -0
  456. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/broadcast.py +0 -0
  457. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/changelog.py +0 -0
  458. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/clipboard.py +0 -0
  459. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/datetime.py +0 -0
  460. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/diff.py +0 -0
  461. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/editor.py +0 -0
  462. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/environment.py +0 -0
  463. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/envvar.py +0 -0
  464. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/file_filter.py +0 -0
  465. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  466. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/gitignore.py +0 -0
  467. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/io.py +0 -0
  468. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/logging.py +0 -0
  469. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/media_tags.py +0 -0
  470. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/message.py +0 -0
  471. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/path.py +0 -0
  472. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/proctitle.py +0 -0
  473. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/proxy.py +0 -0
  474. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  475. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  476. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  477. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  478. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  479. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  480. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  481. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  482. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/server.py +0 -0
  483. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/signals.py +0 -0
  484. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  485. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  486. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/string.py +0 -0
  487. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  488. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/term.py +0 -0
  489. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/trust.py +0 -0
  490. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/typing.py +0 -0
  491. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/__init__.py +0 -0
  492. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  493. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  494. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  495. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/system.py +0 -0
  496. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/app.py +0 -0
  497. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  498. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  499. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  500. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  501. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  502. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  503. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  504. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  505. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  506. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  507. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/index.html +0 -0
  508. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/__init__.py +0 -0
  509. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/__init__.py +0 -0
  510. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/config.py +0 -0
  511. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/open_in.py +0 -0
  512. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/sessions.py +0 -0
  513. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/app.py +0 -0
  514. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/auth.py +0 -0
  515. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/models.py +0 -0
  516. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  517. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/messages.py +0 -0
  518. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/process.py +0 -0
  519. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/worker.py +0 -0
  520. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/_headers +0 -0
  521. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  522. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  523. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  524. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  525. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  526. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  527. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  528. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  529. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  530. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  531. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  532. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  533. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  534. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  535. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  536. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  537. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  538. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  539. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  540. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  541. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  542. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  543. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  544. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  545. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  546. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  547. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  548. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  549. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  550. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  551. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  552. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  553. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  554. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  555. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  556. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  557. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  558. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  559. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  560. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  561. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  562. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  563. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  564. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  565. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  566. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  567. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  568. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  569. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  570. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  571. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  572. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  573. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  574. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  575. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  576. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  577. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  578. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  579. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  580. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  581. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  582. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  583. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  584. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  585. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  586. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  587. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  588. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  589. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  590. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  591. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  592. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  593. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  594. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  595. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  596. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  597. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  598. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  599. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  600. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  601. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  602. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  603. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  604. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  605. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  606. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  607. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  608. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  609. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  610. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  611. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  612. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  613. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  614. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  615. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  616. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  617. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  618. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  619. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  620. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  621. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  622. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  623. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  624. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  625. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  626. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  627. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  628. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  629. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  630. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  631. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  632. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  633. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  634. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  635. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  636. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  637. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  638. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  639. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  640. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  641. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  642. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  643. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  644. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  645. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  646. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  647. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  648. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  649. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  650. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  651. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  652. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  653. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  654. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  655. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  656. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  657. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  658. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  659. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  660. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  661. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  662. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  663. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  664. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  665. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  666. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  667. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  668. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  669. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  670. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  671. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  672. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  673. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  674. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  675. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  676. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  677. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  678. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  679. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  680. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  681. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  682. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  683. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  684. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  685. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  686. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  687. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  688. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  689. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  690. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  691. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  692. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  693. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  694. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  695. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  696. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  697. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  698. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  699. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  700. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  701. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  702. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  703. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  704. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  705. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  706. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  707. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  708. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  709. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  710. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  711. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  712. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  713. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  714. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  715. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  716. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  717. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  718. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  719. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  720. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  721. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  722. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  723. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  724. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  725. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  726. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  727. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  728. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  729. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  730. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  731. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  732. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  733. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  734. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  735. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  736. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  737. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  738. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  739. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  740. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  741. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  742. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  743. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  744. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  745. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  746. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  747. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  748. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  749. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  750. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  751. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  752. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  753. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  754. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  755. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  756. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  757. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  758. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  759. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  760. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  761. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  762. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  763. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  764. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  765. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  766. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  767. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  768. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  769. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  770. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  771. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  772. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  773. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  774. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  775. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  776. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  777. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  778. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  779. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  780. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  781. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  782. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  783. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  784. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  785. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  786. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  787. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  788. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  789. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  790. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  791. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  792. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  793. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  794. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  795. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  796. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  797. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  798. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  799. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  800. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  801. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  802. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  803. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  804. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  805. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  806. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  807. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  808. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  809. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  810. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  811. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  812. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  813. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  814. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  815. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  816. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  817. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  818. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  819. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  820. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  821. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  822. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  823. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  824. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  825. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  826. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  827. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  828. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  829. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  830. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  831. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  832. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  833. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  834. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  835. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  836. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  837. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  838. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  839. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  840. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  841. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  842. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  843. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  844. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  845. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  846. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  847. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  848. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  849. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  850. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  851. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  852. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  853. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  854. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  855. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  856. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  857. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  858. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  859. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  860. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  861. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  862. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  863. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  864. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  865. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  866. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  867. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  868. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  869. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  870. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  871. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  872. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  873. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  874. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  875. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  876. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  877. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  878. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  879. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  880. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  881. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  882. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  883. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  884. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  885. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  886. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  887. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  888. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  889. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  890. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  891. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  892. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  893. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  894. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  895. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  896. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  897. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  898. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  899. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  900. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  901. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  902. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  903. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  904. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  905. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  906. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  907. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  908. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/install.sh +0 -0
  909. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/logo.png +0 -0
  910. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/store/__init__.py +0 -0
  911. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/store/sessions.py +0 -0
  912. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/__init__.py +0 -0
  913. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/file.py +0 -0
  914. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  915. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/protocol.py +0 -0
  916. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/root_hub.py +0 -0
  917. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/serde.py +0 -0
  918. {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.41.0
3
+ Version: 0.42.0
4
4
  Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Pythoughts-labs
@@ -115,14 +115,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.41.0
118
+ ## 🆕 What's New in 0.42.0
119
119
 
120
- - **Goal-driven execution: new `/goal`, `/best-practices`, and `/learn` commands.** `/goal <objective>` sets a persistent thread goal the agent pursues across turns, restarts, and compaction until it is verifiably complete with an evidence-based completion audit, a root-only `UpdateGoal` tool to mark it `complete`/`blocked`, and opt-in `goal.auto_continue` to loop automatically toward it. `/best-practices` (alias `/bp`) injects engineering-discipline guidance now also shipped always-on in the default prompt, and `/learn` distills session lessons into per-project memory.
121
- - **Statusline v2: a full redesign of the shell footer.** Colored segments with a gradient context bar, working spinner, live token speed, session cost/budget, thinking-effort badge, git diff counts, elapsed time, and a clock all fail-closed and tunable via the new `/statusline` command (persisted under `[tui.statusline]`), with ASCII fallback and narrow-width graceful degradation.
122
- - **Agentic orchestration hardening.** Parallel subagents and background tasks get distinctive codenames, foreground `RunAgents` batches run concurrently and roll up child RISKS/BLOCKERS, the review pipeline decomposes large diffs and adversarially verifies every finding, and restricted-profile subagents are now offline, secret-scrubbed, and workspace-jailed by default enforced at execution time, not just prompted.
123
- - **TUI polish.** Flicker-free streaming on synchronized-output terminals, inline ghost-completion for slash commands, monotonic tool-call rows, shell error briefs that surface the failing command's output, and no more transient `<invalid>` flashes or raw-mode hangs on exit.
120
+ - **Parallel coding agents are truly isolated.** `isolation="worktree"` is now enforced, not just recorded: each background write agent runs in its own git worktree of HEAD and reports its worktree path with a diff summary so changes merge deliberately, while foreground shell commands and relative-path edits resolve against the agent's own work dir. Worktrees with commits ahead of their base are retained instead of orphaned, and worktree add/remove serializes per repo.
121
+ - **The agent knows its own permission posture and stops asking when it shouldn't.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, and shell-gate rules, re-emitted exactly when the posture changes. Provably read-only commands (`ls`, `git status`) no longer interrupt the root agent with an approval dialog, via a fail-closed positive allowlist.
122
+ - **Edits recover from whitespace and smart-punctuation drift.** `StrReplaceFile` no longer hard-fails when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes a graduated line-window ladder relocates the edit, preserves CRLF endings, and names the relaxation it used. Ambiguous fuzzy matches still error rather than silently resolving.
123
+ - **MCP servers are controllable.** Per-server `enabledTools`/`disabledTools` arrays in `mcp.json` scope a noisy server down to the tools you want, and a new `mcp.client.startup_timeout_ms` (default 30s) means a hung server can no longer stall every turn `/mcp` now shows one actionable line per failed server.
124
+ - **Quality of life.** `/model` switches now carry the conversation forward via a plain-text summary instead of starting fresh; typo'd config keys warn with their dotted path and source file (`PYTHINKER_STRICT_CONFIG=1` escalates to a startup error); project-scope hooks load only after `/trust`; the in-app updater recovers from Homebrew's untrusted-tap refusal; `/export` redacts secret-named values; inline `/command` references get acted on; and the thinking shimmer no longer animates while a foreground command runs.
124
125
 
125
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.41.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
126
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
126
127
 
127
128
 
128
129
  ---
@@ -212,7 +213,7 @@ 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.41.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.42.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
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/Pythoughts-labs/pythinker-code/releases/latest) |
217
218
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
218
219
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -240,7 +241,7 @@ pythinker # start the interactive TUI
240
241
 
241
242
  ### 🪟 Windows — native installer
242
243
 
243
- `PythinkerSetup-0.41.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
+ `PythinkerSetup-0.42.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
245
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
245
246
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
246
247
  the change. **No UAC prompt.**
@@ -251,13 +252,13 @@ irm https://pythinker.com/install.ps1 | iex
251
252
 
252
253
  # Or manually download the installer + checksum from the Releases page,
253
254
  # verify with Get-FileHash, then run:
254
- .\PythinkerSetup-0.41.0.exe
255
+ .\PythinkerSetup-0.42.0.exe
255
256
 
256
257
  # Open a fresh PowerShell
257
258
  pythinker --version
258
259
  ```
259
260
 
260
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.41.0.exe /ALLUSERS`
261
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.42.0.exe /ALLUSERS`
261
262
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
262
263
 
263
264
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -279,6 +280,8 @@ the files and the PATH edit.
279
280
  ```sh
280
281
  # 1. Install
281
282
  brew install Pythoughts-labs/pythinker/pythinker-code
283
+ # Homebrew ≥ 5 may refuse the untrusted tap; trust it once, then re-run:
284
+ # brew trust pythoughts-labs/pythinker
282
285
 
283
286
  # 2. Verify
284
287
  pythinker --version
@@ -294,6 +297,11 @@ latest version.
294
297
  **Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
295
298
  auto-update; run this whenever you want the latest).
296
299
 
300
+ > **Untrusted-tap refusal** — Homebrew ≥ 5 (with `HOMEBREW_REQUIRE_TAP_TRUST`)
301
+ > refuses third-party taps until you trust them once:
302
+ > `brew trust pythoughts-labs/pythinker`. The in-app updater detects the
303
+ > refusal and offers to run it for you.
304
+
297
305
  **Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
298
306
 
299
307
  > The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
@@ -308,26 +316,26 @@ attached to every GitHub Release.
308
316
 
309
317
  ```sh
310
318
  # Debian / Ubuntu (x86_64)
311
- sudo dpkg -i pythinker-code_0.41.0_amd64.deb
319
+ sudo dpkg -i pythinker-code_0.42.0_amd64.deb
312
320
  sudo apt-get install -f # only if dpkg reports missing deps
313
321
 
314
322
  # Debian / Ubuntu (ARM64)
315
- sudo dpkg -i pythinker-code_0.41.0_arm64.deb
323
+ sudo dpkg -i pythinker-code_0.42.0_arm64.deb
316
324
 
317
325
  # Fedora / RHEL / openSUSE (x86_64)
318
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.x86_64.rpm
319
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.x86_64.rpm.sha256
320
- sha256sum -c pythinker-code-0.41.0.x86_64.rpm.sha256
326
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm
327
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm.sha256
328
+ sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256
321
329
  # Fedora / RHEL:
322
- sudo dnf install ./pythinker-code-0.41.0.x86_64.rpm
330
+ sudo dnf install ./pythinker-code-0.42.0.x86_64.rpm
323
331
  # openSUSE:
324
- sudo zypper install ./pythinker-code-0.41.0.x86_64.rpm
332
+ sudo zypper install ./pythinker-code-0.42.0.x86_64.rpm
325
333
 
326
334
  # Fedora / RHEL (aarch64)
327
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.aarch64.rpm
328
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.aarch64.rpm.sha256
329
- sha256sum -c pythinker-code-0.41.0.aarch64.rpm.sha256
330
- sudo dnf install ./pythinker-code-0.41.0.aarch64.rpm
335
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm
336
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm.sha256
337
+ sha256sum -c pythinker-code-0.42.0.aarch64.rpm.sha256
338
+ sudo dnf install ./pythinker-code-0.42.0.aarch64.rpm
331
339
  ```
332
340
 
333
341
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -336,8 +344,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
336
344
  **Verify before install:**
337
345
 
338
346
  ```sh
339
- sha256sum -c pythinker-code_0.41.0_amd64.deb.sha256 # Debian/Ubuntu
340
- sha256sum -c pythinker-code-0.41.0.x86_64.rpm.sha256 # Fedora/RHEL
347
+ sha256sum -c pythinker-code_0.42.0_amd64.deb.sha256 # Debian/Ubuntu
348
+ sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256 # Fedora/RHEL
341
349
  ```
342
350
 
343
351
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -620,7 +628,7 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
620
628
  ### 🛠️ Manage persistent MCP servers
621
629
 
622
630
  ```sh
623
- # 📚 Context7 stdio server (Codex-style: NAME -- COMMAND)
631
+ # 📚 Context7 stdio server (positional form: NAME -- COMMAND)
624
632
  pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
625
633
  # Added MCP server 'context7' to ~/.pythinker/mcp.json
626
634
 
@@ -50,14 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.41.0
53
+ ## 🆕 What's New in 0.42.0
54
54
 
55
- - **Goal-driven execution: new `/goal`, `/best-practices`, and `/learn` commands.** `/goal <objective>` sets a persistent thread goal the agent pursues across turns, restarts, and compaction until it is verifiably complete with an evidence-based completion audit, a root-only `UpdateGoal` tool to mark it `complete`/`blocked`, and opt-in `goal.auto_continue` to loop automatically toward it. `/best-practices` (alias `/bp`) injects engineering-discipline guidance now also shipped always-on in the default prompt, and `/learn` distills session lessons into per-project memory.
56
- - **Statusline v2: a full redesign of the shell footer.** Colored segments with a gradient context bar, working spinner, live token speed, session cost/budget, thinking-effort badge, git diff counts, elapsed time, and a clock all fail-closed and tunable via the new `/statusline` command (persisted under `[tui.statusline]`), with ASCII fallback and narrow-width graceful degradation.
57
- - **Agentic orchestration hardening.** Parallel subagents and background tasks get distinctive codenames, foreground `RunAgents` batches run concurrently and roll up child RISKS/BLOCKERS, the review pipeline decomposes large diffs and adversarially verifies every finding, and restricted-profile subagents are now offline, secret-scrubbed, and workspace-jailed by default enforced at execution time, not just prompted.
58
- - **TUI polish.** Flicker-free streaming on synchronized-output terminals, inline ghost-completion for slash commands, monotonic tool-call rows, shell error briefs that surface the failing command's output, and no more transient `<invalid>` flashes or raw-mode hangs on exit.
55
+ - **Parallel coding agents are truly isolated.** `isolation="worktree"` is now enforced, not just recorded: each background write agent runs in its own git worktree of HEAD and reports its worktree path with a diff summary so changes merge deliberately, while foreground shell commands and relative-path edits resolve against the agent's own work dir. Worktrees with commits ahead of their base are retained instead of orphaned, and worktree add/remove serializes per repo.
56
+ - **The agent knows its own permission posture and stops asking when it shouldn't.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, and shell-gate rules, re-emitted exactly when the posture changes. Provably read-only commands (`ls`, `git status`) no longer interrupt the root agent with an approval dialog, via a fail-closed positive allowlist.
57
+ - **Edits recover from whitespace and smart-punctuation drift.** `StrReplaceFile` no longer hard-fails when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes a graduated line-window ladder relocates the edit, preserves CRLF endings, and names the relaxation it used. Ambiguous fuzzy matches still error rather than silently resolving.
58
+ - **MCP servers are controllable.** Per-server `enabledTools`/`disabledTools` arrays in `mcp.json` scope a noisy server down to the tools you want, and a new `mcp.client.startup_timeout_ms` (default 30s) means a hung server can no longer stall every turn `/mcp` now shows one actionable line per failed server.
59
+ - **Quality of life.** `/model` switches now carry the conversation forward via a plain-text summary instead of starting fresh; typo'd config keys warn with their dotted path and source file (`PYTHINKER_STRICT_CONFIG=1` escalates to a startup error); project-scope hooks load only after `/trust`; the in-app updater recovers from Homebrew's untrusted-tap refusal; `/export` redacts secret-named values; inline `/command` references get acted on; and the thinking shimmer no longer animates while a foreground command runs.
59
60
 
60
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.41.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61
62
 
62
63
 
63
64
  ---
@@ -147,7 +148,7 @@ 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.41.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.42.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
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/Pythoughts-labs/pythinker-code/releases/latest) |
152
153
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
153
154
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -175,7 +176,7 @@ pythinker # start the interactive TUI
175
176
 
176
177
  ### 🪟 Windows — native installer
177
178
 
178
- `PythinkerSetup-0.41.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
+ `PythinkerSetup-0.42.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
180
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
180
181
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
181
182
  the change. **No UAC prompt.**
@@ -186,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
186
187
 
187
188
  # Or manually download the installer + checksum from the Releases page,
188
189
  # verify with Get-FileHash, then run:
189
- .\PythinkerSetup-0.41.0.exe
190
+ .\PythinkerSetup-0.42.0.exe
190
191
 
191
192
  # Open a fresh PowerShell
192
193
  pythinker --version
193
194
  ```
194
195
 
195
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.41.0.exe /ALLUSERS`
196
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.42.0.exe /ALLUSERS`
196
197
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
197
198
 
198
199
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -214,6 +215,8 @@ the files and the PATH edit.
214
215
  ```sh
215
216
  # 1. Install
216
217
  brew install Pythoughts-labs/pythinker/pythinker-code
218
+ # Homebrew ≥ 5 may refuse the untrusted tap; trust it once, then re-run:
219
+ # brew trust pythoughts-labs/pythinker
217
220
 
218
221
  # 2. Verify
219
222
  pythinker --version
@@ -229,6 +232,11 @@ latest version.
229
232
  **Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
230
233
  auto-update; run this whenever you want the latest).
231
234
 
235
+ > **Untrusted-tap refusal** — Homebrew ≥ 5 (with `HOMEBREW_REQUIRE_TAP_TRUST`)
236
+ > refuses third-party taps until you trust them once:
237
+ > `brew trust pythoughts-labs/pythinker`. The in-app updater detects the
238
+ > refusal and offers to run it for you.
239
+
232
240
  **Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
233
241
 
234
242
  > The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
@@ -243,26 +251,26 @@ attached to every GitHub Release.
243
251
 
244
252
  ```sh
245
253
  # Debian / Ubuntu (x86_64)
246
- sudo dpkg -i pythinker-code_0.41.0_amd64.deb
254
+ sudo dpkg -i pythinker-code_0.42.0_amd64.deb
247
255
  sudo apt-get install -f # only if dpkg reports missing deps
248
256
 
249
257
  # Debian / Ubuntu (ARM64)
250
- sudo dpkg -i pythinker-code_0.41.0_arm64.deb
258
+ sudo dpkg -i pythinker-code_0.42.0_arm64.deb
251
259
 
252
260
  # Fedora / RHEL / openSUSE (x86_64)
253
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.x86_64.rpm
254
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.x86_64.rpm.sha256
255
- sha256sum -c pythinker-code-0.41.0.x86_64.rpm.sha256
261
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm
262
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm.sha256
263
+ sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256
256
264
  # Fedora / RHEL:
257
- sudo dnf install ./pythinker-code-0.41.0.x86_64.rpm
265
+ sudo dnf install ./pythinker-code-0.42.0.x86_64.rpm
258
266
  # openSUSE:
259
- sudo zypper install ./pythinker-code-0.41.0.x86_64.rpm
267
+ sudo zypper install ./pythinker-code-0.42.0.x86_64.rpm
260
268
 
261
269
  # Fedora / RHEL (aarch64)
262
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.aarch64.rpm
263
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.aarch64.rpm.sha256
264
- sha256sum -c pythinker-code-0.41.0.aarch64.rpm.sha256
265
- sudo dnf install ./pythinker-code-0.41.0.aarch64.rpm
270
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm
271
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm.sha256
272
+ sha256sum -c pythinker-code-0.42.0.aarch64.rpm.sha256
273
+ sudo dnf install ./pythinker-code-0.42.0.aarch64.rpm
266
274
  ```
267
275
 
268
276
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -271,8 +279,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
271
279
  **Verify before install:**
272
280
 
273
281
  ```sh
274
- sha256sum -c pythinker-code_0.41.0_amd64.deb.sha256 # Debian/Ubuntu
275
- sha256sum -c pythinker-code-0.41.0.x86_64.rpm.sha256 # Fedora/RHEL
282
+ sha256sum -c pythinker-code_0.42.0_amd64.deb.sha256 # Debian/Ubuntu
283
+ sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256 # Fedora/RHEL
276
284
  ```
277
285
 
278
286
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -555,7 +563,7 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
555
563
  ### 🛠️ Manage persistent MCP servers
556
564
 
557
565
  ```sh
558
- # 📚 Context7 stdio server (Codex-style: NAME -- COMMAND)
566
+ # 📚 Context7 stdio server (positional form: NAME -- COMMAND)
559
567
  pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
560
568
  # Added MCP server 'context7' to ~/.pythinker/mcp.json
561
569
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.41.0"
3
+ version = "0.42.0"
4
4
  description = "Pythinker — an agentic CLI developed by Pythoughts-labs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,27 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.42.0 (2026-06-12)
19
+
20
+ - **Adversarial branch review hardening.** A multi-agent review pass confirmed and fixed: committed-but-clean isolation worktrees are now retained (commits ahead of the creation base count as changes — they were previously orphaned on cleanup); foreground shell commands and relative-path file edits now resolve against the agent's work dir, so worktree isolation actually binds them (host exec gained a `cwd` argument); safe mode now also disables the read-only-command prompt elision; locally parallel-safe MCP/tools run in parallel in the same-step gate; worktree add/remove serializes per repo. Behavior notes: same-step tool calls without `supports_parallel` now serialize deterministically (previously fully concurrent), and text-mode error diagnostics moved to stderr — capture `2>&1` or use `--output-format stream-json` if you scraped stdout.
21
+ - **The agent now knows its own permission posture.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, session-approved actions, and the shell gate's command-shaping rules — re-emitted exactly when the posture changes (/yolo, /auto, /trust, new approvals) instead of the model discovering policy through denied tool calls.
22
+ - **Edits recover from whitespace and smart-punctuation drift.** StrReplaceFile no longer hard-fails with "old string not found" when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes: a graduated line-window ladder relocates the edit, replaces the actual file slice (preserving CRLF endings), and names the relaxation it used in the tool message. Multiple fuzzy hits without replace_all still error, so ambiguity is never silently resolved.
23
+ - **`isolation="worktree"` is now enforced for background write agents.** Previously it only recorded intent, so parallel coders shared one working tree and could clobber each other. A write-profile child now runs in its own git worktree of HEAD; its final report names the worktree path with a diff summary so changes merge deliberately, clean worktrees are removed, non-git roots fail with an actionable error, and read-profile children ignore the request.
24
+ - **MCP servers can be scoped to specific tools.** Optional `enabledTools` (exclusive allowlist) and `disabledTools` (denylist, wins on conflict) arrays per server in `mcp.json` keep a noisy server from flooding the model's tool list — filtered tools are never registered, and a call-time re-check guards shared tool maps.
25
+ - **A hung MCP server can no longer stall the whole session.** Server connects are bounded by a new `mcp.client.startup_timeout_ms` (default 30s) — previously a hung connect blocked every agent turn. `/mcp` now shows one actionable line per failed server (timeout → the config knob, 401 → the exact auth command, missing binary → the command path) instead of a bare "failed".
26
+ - **Provably read-only commands no longer prompt for approval.** The first `ls` or `git status` of a session used to interrupt with an approval dialog. A tight positive allowlist (read-only binaries and git subcommands, with hidden-command, write-redirection, wrapper, and fake-path rejections, fail closed) now elides the prompt in the root agent; subagents keep requesting approval as their unattended defense surface, and deny-profile decisions are never overridden.
27
+ - **Switching models keeps your conversation.** `/model` used to start a fresh session, discarding all context. The switch now seeds the new session with a plain-text summary written by the outgoing model (so provider-specific message formats never cross the boundary), falling back to the old fresh start if summarization fails; disable with `model_switch_carryover = false`.
28
+ - **Typo'd config keys are no longer silently ignored.** Loading now diffs the merged config against the model schema and warns with the dotted path and originating scope file for every unrecognized key (`default_yolo_typo = true` names itself and its file instead of silently changing nothing); `PYTHINKER_STRICT_CONFIG=1` escalates the findings to a startup error for CI.
29
+ - **Project-scope hooks now require trusting the project.** A cloned repository's `.pythinker/config.toml` could previously auto-execute its shell hooks at session start. Hooks from project and local scopes now load only after `/trust` records a durable per-project decision (stored user-side in `trusted_projects.json`, keyed by the resolved repo root); until then they are stripped with a warning naming the fix. Broken TOML in an untrusted project no longer blocks startup — the scope is treated as empty with a warning, while trusted projects keep the loud error.
30
+ - **Agent orchestration guidance is sharper for substantial tasks.** The default prompt now sharpens work-shaping guidance, and a new root-only runtime reminder nudges substantial normal-mode tasks toward the lightest effective path — direct tools, `SetTodoList`, foreground `RunAgents`, or verification — while backing off for plan mode, `/goal`, auto mode, and subagents.
31
+ - **The in-app updater recovers from Homebrew's untrusted-tap refusal.** Homebrew 5.0 (`HOMEBREW_REQUIRE_TAP_TRUST`) refuses to load formulas from third-party taps until `brew trust <tap>` is run once, which made the in-app `brew upgrade` fail with only a generic "run manually" hint. The updater now detects both the hard `Refusing to load … from untrusted tap` refusal and the soft `Skipping … not trusted` warning, offers to run `brew trust pythoughts-labs/pythinker` and retry the upgrade once on an interactive terminal, and otherwise prints the exact remediation. It also catches the silent no-op where an untrusted tap is skipped during `brew update` and `brew upgrade` exits 0 without advancing the version.
32
+ - **Session exports redact secrets surfaced by tool output.** A tool result (e.g. `grep`/`cat` over a `.env`) could write a secret value into an exported transcript in plaintext. `/export` now redacts the value of secret-named keys (`password`, `token`, `api_key`, `secret`, …) to `[REDACTED]` in both the markdown and YAML formats, while leaving non-secret keys such as `token_count`, usernames, and ports intact.
33
+ - **The welcome logo's antenna blinks a fixed number of times on launch, then settles.** Replaces the terminal's indefinite slow-blink with a bounded boot animation — the antenna ball blinks seven times after the banner prints and then holds steady. It is skipped under reduced motion, on non-interactive output, and when the terminal is too short to keep the antenna row on screen.
34
+ - **Inline `/command` references get acted on, not just explained away.** When a message mentions a slash command mid-sentence (e.g. "your `/goal` today is to `/plan` and build the page"), the command doesn't auto-run — but the agent no longer leads its reply by reporting it as failed. The per-turn reminder and the system prompt now steer the agent to act on the intent: call the real `EnterPlanMode` tool for `/plan` (clarified as a genuine, callable tool so models stop doubting it exists), pursue the described objective for `/goal`, load `/skill:<name>` via `ReadSkill`, and apply equivalent guidance for other commands — only surfacing how to invoke the literal command when genuinely needed.
35
+ - **The "thinking" shimmer no longer runs while a foreground command does.** When the agent started a long-running foreground process — a dev server via `npm`/`docker`, a watch task — the shimmering verb spinner ("Working…/Thinking…") kept animating for the whole turn, implying the agent was busy when it was really just awaiting the subprocess. The spinner is now suppressed while any foreground tool is mid-execution; the tool card's own animated running marker (and its streaming output) carries the liveness, so the shimmer means "the agent is thinking" again and reappears the moment the command returns.
36
+
37
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
38
+
18
39
  ## 0.41.0 (2026-06-11)
19
40
 
20
41
  - **New `/goal` command — goal-driven execution that loops until verified.** `/goal <objective>` sets a persistent thread goal the agent pursues across turns, restarts, and context compaction until it is verifiably complete. It kicks off immediately with a success-criteria derivation prompt and is re-injected each turn with fidelity rules (no scope-shrinking, no easier-to-test substitutes) and an evidence-based completion audit — completion may only be claimed after every requirement is proven against current state. The new root-only `UpdateGoal` tool marks the goal `complete` (after that audit) or `blocked` (after a strict three-strike audit) and stops the reminders; opt-in `goal.auto_continue` (new config table, default off, `max_continuations` 1–10, capped at 3) drives automatic continuation turns toward the goal until it is marked, a tool call is rejected, or the cap is reached, with a wrap-up instruction on the final continuation. Subcommands: `view`, `pause`, `resume`, `clear`. Objectives are injected as untrusted data, never as higher-priority instructions.
@@ -296,8 +296,10 @@ class ACPHost:
296
296
  ) -> None:
297
297
  await self._fallback.mkdir(path, parents=parents, exist_ok=exist_ok)
298
298
 
299
- async def exec(self, *args: str, env: Mapping[str, str] | None = None) -> HostProcess:
300
- return await self._fallback.exec(*args, env=env)
299
+ async def exec(
300
+ self, *args: str, env: Mapping[str, str] | None = None, cwd: str | None = None
301
+ ) -> HostProcess:
302
+ return await self._fallback.exec(*args, env=env, cwd=cwd)
301
303
 
302
304
  def _abs_path(self, path: StrOrHostPath) -> str:
303
305
  host_path = path if isinstance(path, HostPath) else HostPath(path)
@@ -10,6 +10,7 @@ from pythinker_code.soul.agent import Runtime
10
10
  from pythinker_code.soul.approval import Approval
11
11
  from pythinker_code.soul.permission import check_shell_command_allowed
12
12
  from pythinker_code.soul.toolset import PythinkerToolset
13
+ from pythinker_code.tools.ask_user import AskUserQuestion
13
14
  from pythinker_code.tools.shell import Params as ShellParams
14
15
  from pythinker_code.tools.shell import Shell
15
16
  from pythinker_code.tools.utils import ToolResultBuilder
@@ -28,6 +29,11 @@ def replace_tools(
28
29
  # Only replace tools when running locally or under ACPHost.
29
30
  return
30
31
 
32
+ # ACP clients get no interactive question UI (the session loop signals
33
+ # QuestionNotSupported), so don't advertise the tool — a hallucinated call
34
+ # still resolves through the registered tool's graceful fallback.
35
+ toolset.hide(AskUserQuestion.name)
36
+
31
37
  if client_capabilities.terminal and (shell_tool := toolset.find(Shell)):
32
38
  # Replace the Shell tool with the ACP Terminal tool if supported.
33
39
  toolset.add(
@@ -48,6 +54,8 @@ class HideOutputDisplayBlock(DisplayBlock):
48
54
 
49
55
 
50
56
  class Terminal(CallableTool2[ShellParams]):
57
+ emits_tool_execution_started_after_approval = True
58
+
51
59
  def __init__(
52
60
  self,
53
61
  shell_tool: Shell,
@@ -105,7 +105,7 @@ For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, prese
105
105
 
106
106
  **Act with tools; prose is not action.** Code that appears only in your reply is not saved — use `WriteFile` to create or overwrite, `StrReplaceFile` to edit, `Shell` to run and verify; iterate on failures. Follow each tool's parameter spec exactly. Don't narrate routine tool calls. Do not re-read a file after a successful edit tool call.
107
107
 
108
- **Parallelize.** Before every tool response, ask whether another independent read/search/check can run in the same turn — you may emit any number of tool calls in one response; batch non-interfering calls. Serializing independent operations wastes time and grows context. This is very important to your performance.
108
+ **Parallelize.** Before every tool response, ask whether another independent read/search/check can run in the same turn — you may emit any number of tool calls in one response; batch non-interfering calls. Choose the lightest effective work shape: direct tools for known-path checks, `SetTodoList` once a substantial approach is clear, foreground `RunAgents` when independent children feed immediate synthesis, and background agents only when you can make other progress while they run. Serializing independent operations wastes time and grows context. This is very important to your performance.
109
109
 
110
110
  **Spend context deliberately.** The context window is a finite budget: read targeted ranges instead of whole files when the region is known, distill long command output to what the task needs, and push bulky exploration into subagents that return summaries rather than raw dumps.
111
111
 
@@ -125,7 +125,7 @@ For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, prese
125
125
 
126
126
  **Skills (`ReadSkill`).** Load a skill's exact instructions before applying its workflow — mandatory for `review-pr`, `diagnose-ci-failures`, `fix-errors`, `implement-specs`, `spec-driven-implementation`, `check-impl-against-spec`, `resolve-merge-conflicts`, and `create-pr`. Read skill details only when needed, to conserve context. Catalog and scope precedence in §12.
127
127
 
128
- **Inline `/command` references.** Slash commands execute only as their own message starting with `/`. A `/command` or `/skill:<name>` mentioned mid-message did not run: treat the reference as part of the request load a referenced skill via `ReadSkill`, apply referenced guidance yourself, or tell the user to invoke it as a standalone message. Never silently drop such a reference.
128
+ **Inline `/command` references.** Slash commands execute only as their own message starting with `/`. A `/command` or `/skill:<name>` mentioned mid-message did not auto-run, but it still expresses intent — act on it rather than leading your reply by reporting it as failed. For `/plan`, call `EnterPlanMode` (a real tool in your toolset, not just prose); for `/goal`, pursue the described objective until it is verifiably done; for `/skill:<name>`, load it via `ReadSkill` and apply it; for other guidance commands, apply the equivalent guidance yourself. Mention invoking the real command only when genuinely needed. Never silently drop such a reference.
129
129
 
130
130
  **MCP.** Connected MCP servers expose their capabilities as ordinary tools already in your toolset (descriptions name the server). To *use* one, invoke its tools directly — never pip-install the server, import it as a module, or search the repo for its config. If a named server has no tools present, it is not connected (loading, failed, or unauthorized), not missing: point the user to `/mcp` for status, and to `pythinker mcp auth <server_name>` for an unauthorized OAuth server.
131
131
 
@@ -388,6 +388,30 @@ class PythinkerCLI:
388
388
  from pythinker_code.hooks.engine import HookEngine
389
389
 
390
390
  hook_engine = HookEngine(config.hooks, cwd=str(session.work_dir))
391
+ if config.disabled_project_hooks:
392
+ # The load-time logger.warning only reaches shell users; publish a
393
+ # notification so web/ACP frontends also learn why their project
394
+ # hooks did not run and how to enable them.
395
+ from pythinker_code.notifications.models import NotificationEvent
396
+
397
+ runtime.notifications.publish(
398
+ NotificationEvent(
399
+ id=f"project-hooks-disabled:{session.id}",
400
+ category="system",
401
+ type="project_hooks_disabled",
402
+ source_kind="config",
403
+ source_id="project_trust",
404
+ title="Project hooks disabled (untrusted project)",
405
+ body=(
406
+ "Hooks defined in "
407
+ + ", ".join(config.disabled_project_hooks)
408
+ + " are disabled until you trust this project. Run /trust to "
409
+ "enable them (takes effect on /reload or next start)."
410
+ ),
411
+ severity="warning",
412
+ dedupe_key=f"project-hooks-disabled:{session.id}",
413
+ )
414
+ )
391
415
  soul.set_hook_engine(hook_engine)
392
416
  runtime.hook_engine = hook_engine
393
417
 
@@ -603,7 +627,7 @@ class PythinkerCLI:
603
627
  async def _env(self) -> AsyncGenerator[None]:
604
628
  async with _CWD_LOCK:
605
629
  original_cwd = HostPath.cwd()
606
- await pythinker_host.chdir(self._runtime.session.work_dir)
630
+ await pythinker_host.chdir(self._runtime.work_dir)
607
631
  try:
608
632
  # to ignore possible warnings from dateparser
609
633
  warnings.filterwarnings("ignore", category=DeprecationWarning)
@@ -782,7 +806,7 @@ class PythinkerCLI:
782
806
  """Run the Pythinker CLI instance with shell UI."""
783
807
  from pythinker_code.ui.shell import Shell, WelcomeInfoItem
784
808
 
785
- work_dir = self._runtime.session.work_dir
809
+ work_dir = self._runtime.work_dir
786
810
  welcome_info = [
787
811
  WelcomeInfoItem(name="Directory", value=str(shorten_home(work_dir))),
788
812
  ]
@@ -4,8 +4,11 @@ from __future__ import annotations
4
4
  import asyncio
5
5
  import contextlib
6
6
  from dataclasses import replace
7
+ from pathlib import Path
7
8
  from typing import TYPE_CHECKING
8
9
 
10
+ from pythinker_host.path import HostPath
11
+
9
12
  from pythinker_code.approval_runtime import (
10
13
  ApprovalSource,
11
14
  reset_current_approval_source,
@@ -64,6 +67,7 @@ class BackgroundAgentRunner:
64
67
  model_override: str | None,
65
68
  timeout_s: int | None = None,
66
69
  resumed: bool = False,
70
+ isolation: str | None = None,
67
71
  ) -> None:
68
72
  self._runtime = runtime
69
73
  self._manager = manager
@@ -74,6 +78,8 @@ class BackgroundAgentRunner:
74
78
  self._model_override = model_override
75
79
  self._timeout_s = timeout_s
76
80
  self._resumed = resumed
81
+ self._isolation = isolation
82
+ self._worktree_path: Path | None = None
77
83
  self._builder = SubagentBuilder(runtime)
78
84
  self._approval_update_tasks: set[asyncio.Task[None]] = set()
79
85
 
@@ -131,11 +137,13 @@ class BackgroundAgentRunner:
131
137
  output.error(
132
138
  _timeout_recovery_message(timeout_s=self._timeout_s, agent_id=self._agent_id)
133
139
  )
140
+ self._note_retained_worktree(output)
134
141
  else:
135
142
  # Internal timeout (e.g. aiohttp request) — treat as generic failure
136
143
  logger.exception("Background agent runner failed")
137
144
  self._finalize_safely(outcome="failed", reason=str(exc))
138
145
  output.error(_failure_recovery_message(reason=str(exc), agent_id=self._agent_id))
146
+ self._note_retained_worktree(output)
139
147
  except asyncio.CancelledError:
140
148
  self._finalize_safely(outcome="killed", reason="Stopped by TaskStop")
141
149
  output.stage("cancelled")
@@ -150,6 +158,7 @@ class BackgroundAgentRunner:
150
158
  logger.exception("Background agent runner failed")
151
159
  self._finalize_safely(outcome="failed", reason=str(exc))
152
160
  output.error(_failure_recovery_message(reason=str(exc), agent_id=self._agent_id))
161
+ self._note_retained_worktree(output)
153
162
  finally:
154
163
  # Whatever happens in approval cleanup below, the dict pop must
155
164
  # run — it is the *only* place that removes this task from
@@ -184,12 +193,14 @@ class BackgroundAgentRunner:
184
193
  effective_model=self._model_override,
185
194
  )
186
195
 
196
+ work_dir_override = await self._prepare_isolation_worktree(output)
187
197
  spec = SubagentRunSpec(
188
198
  agent_id=self._agent_id,
189
199
  type_def=type_def,
190
200
  launch_spec=launch_spec,
191
201
  prompt=self._prompt,
192
202
  resumed=self._resumed,
203
+ work_dir_override=work_dir_override,
193
204
  )
194
205
  soul, prompt = await prepare_soul(
195
206
  spec,
@@ -220,6 +231,7 @@ class BackgroundAgentRunner:
220
231
  if failure is not None:
221
232
  self._finalize_safely(outcome="failed", reason=failure.message)
222
233
  output.error(_failure_recovery_message(reason=failure.message, agent_id=self._agent_id))
234
+ self._note_retained_worktree(output)
223
235
  output.stage(f"failed: {failure.brief}")
224
236
  return
225
237
  output.stage("run_soul_finished")
@@ -228,6 +240,7 @@ class BackgroundAgentRunner:
228
240
  self._finalize_safely(
229
241
  outcome="failed", reason="Agent completed but produced no output."
230
242
  )
243
+ self._note_retained_worktree(output)
231
244
  output.stage("failed: empty output")
232
245
  return
233
246
  # Surface this child's total LLM spend so the orchestrating parent can budget a
@@ -235,9 +248,74 @@ class BackgroundAgentRunner:
235
248
  # runner. Background results are read later via TaskOutput, so the spend rides in
236
249
  # the written transcript rather than the immediate (launch-stub) tool return.
237
250
  output.usage(format_usage_lines("child", soul.cumulative_usage, soul.model_name))
251
+ final_response = await self._append_worktree_report(final_response)
238
252
  output.summary(final_response)
239
253
  self._finalize_safely(outcome="completed")
240
254
 
255
+ async def _prepare_isolation_worktree(self, output: SubagentOutputWriter) -> HostPath | None:
256
+ """Honor isolation='worktree' for write-profile children.
257
+
258
+ Read-profile children gain nothing from isolation (they cannot
259
+ mutate), so the request is logged and skipped rather than failing
260
+ the task. Raises WorktreeError for non-git roots — actionable, and
261
+ better surfaced before any model spend.
262
+ """
263
+ if self._isolation != "worktree":
264
+ return None
265
+ from pythinker_code.soul.permission import subagent_type_allows_file_mutation
266
+ from pythinker_code.subagents.worktree import create_agent_worktree
267
+
268
+ if not subagent_type_allows_file_mutation(self._subagent_type):
269
+ logger.info(
270
+ "isolation='worktree' ignored for read-profile subagent type {t}",
271
+ t=self._subagent_type,
272
+ )
273
+ return None
274
+ worktree = Path(str(self._runtime.session.dir)) / "worktrees" / self._agent_id
275
+ await create_agent_worktree(Path(str(self._runtime.work_dir)), worktree)
276
+ self._worktree_path = worktree
277
+ output.stage(f"worktree_created: {worktree}")
278
+ return HostPath.unsafe_from_local_path(worktree)
279
+
280
+ def _note_retained_worktree(self, output: SubagentOutputWriter) -> None:
281
+ """Name the retained worktree on failure/timeout paths.
282
+
283
+ Retention on failure is deliberate — resume reuses the worktree and a
284
+ post-mortem may need its state — but it must never be silent.
285
+ """
286
+ if self._worktree_path is None:
287
+ return
288
+ output.stage(
289
+ f"worktree_retained: {self._worktree_path} (resume reuses it; remove with "
290
+ f"`git worktree remove {self._worktree_path}`)"
291
+ )
292
+
293
+ async def _append_worktree_report(self, final_response: str) -> str:
294
+ """Tell the orchestrator where the isolated changes live.
295
+
296
+ Changes are never auto-merged; the report carries the worktree path
297
+ and a diff summary so merging stays a deliberate decision. Clean
298
+ worktrees are removed.
299
+ """
300
+ if self._worktree_path is None:
301
+ return final_response
302
+ from pythinker_code.subagents.worktree import (
303
+ cleanup_agent_worktree,
304
+ worktree_change_summary,
305
+ )
306
+
307
+ summary = await worktree_change_summary(self._worktree_path)
308
+ disposition = await cleanup_agent_worktree(
309
+ Path(str(self._runtime.work_dir)),
310
+ self._worktree_path,
311
+ has_changes=bool(summary),
312
+ )
313
+ return (
314
+ f"{final_response}\n\n## Isolation worktree\n"
315
+ f"Path: {self._worktree_path} ({disposition})\n"
316
+ f"{summary or 'No changes were made.'}"
317
+ )
318
+
241
319
  def _on_approval_runtime_event(self, event: ApprovalRuntimeEvent) -> None:
242
320
  request = event.request
243
321
  if request.source.kind != "background_agent" or request.source.id != self._task_id:
@@ -397,6 +397,7 @@ class BackgroundTaskManager:
397
397
  model_override=model_override,
398
398
  timeout_s=effective_timeout,
399
399
  resumed=resumed,
400
+ isolation=isolation,
400
401
  ).run()
401
402
  )
402
403
  self._live_agent_tasks[task_id] = task