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