pythinker-code 0.36.0__tar.gz → 0.37.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 (873) hide show
  1. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/PKG-INFO +26 -23
  2. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/README.md +25 -22
  3. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/CHANGELOG.md +11 -0
  5. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/agent.yaml +6 -0
  6. pythinker_code-0.37.0/src/pythinker_code/agents/default/ask.yaml +62 -0
  7. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/coder.yaml +15 -0
  8. pythinker_code-0.37.0/src/pythinker_code/agents/default/debug.yaml +67 -0
  9. pythinker_code-0.37.0/src/pythinker_code/agents/default/planner.yaml +44 -0
  10. pythinker_code-0.37.0/src/pythinker_code/agents/default/scout.yaml +55 -0
  11. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/system.md +4 -0
  12. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/verifier.yaml +11 -0
  13. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agentspec.py +32 -1
  14. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/__init__.py +11 -2
  15. pythinker_code-0.37.0/src/pythinker_code/prompts/compact.md +51 -0
  16. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/agent.py +11 -0
  17. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/pythinkersoul.py +4 -0
  18. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/toolset.py +60 -3
  19. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read.py +4 -3
  20. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/fetch.py +4 -3
  21. pythinker_code-0.37.0/src/pythinker_code/utils/artifacts.py +97 -0
  22. pythinker_code-0.37.0/src/pythinker_code/utils/trust.py +23 -0
  23. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/_baseUniq-RGEFphr7.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/_baseUniq-rFto-eyR.js +1 -1
  24. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/arc-9K0m44ch.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/arc-CdMQnDXw.js +1 -1
  25. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-C0nvy1hG.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DCNIO25e.js +1 -1
  26. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DmYV0ieN.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DV4drAaI.js +1 -1
  27. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-Dz3SYodh.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BtAg1Zl9.js +1 -1
  28. pythinker_code-0.37.0/src/pythinker_code/web/static/assets/channel-qpt7XUXw.js +1 -0
  29. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-BX1gBkhF.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-D2ejrCds.js +1 -1
  30. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CqjtvEue.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BmSORZMZ.js +1 -1
  31. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DhPpx0aL.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-D-5sSKEk.js +1 -1
  32. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CyWNNc9t.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BLDxXqS1.js +1 -1
  33. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-V88CphNu.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DqbdShlY.js +1 -1
  34. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-C-ULFL_Y.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-Byme_vwF.js +1 -1
  35. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-JtgNqNWl.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Bct-_CkM.js +1 -1
  36. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-CjMgcyz8.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DUdXVwI0.js +1 -1
  37. pythinker_code-0.37.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-DpsBv1PV.js +1 -0
  38. pythinker_code-0.37.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-DpsBv1PV.js +1 -0
  39. pythinker_code-0.37.0/src/pythinker_code/web/static/assets/clone-CIyLass1.js +1 -0
  40. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DuDOLcG7.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-BxezgptM.js +1 -1
  41. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-CzvOsRUc.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BkS_yy5Q.js +1 -1
  42. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/cytoscape.esm-DeuJvyQ8.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/cytoscape.esm-D8tXqheh.js +1 -1
  43. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-B0x5PJqt.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-BH_fVKlE.js +1 -1
  44. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CiZD-Kr6.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DOYEXuA-.js +1 -1
  45. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-C5aGMgVW.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-wVuqO334.js +1 -1
  46. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CK1tBLlx.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-B9XL_8QF.js +1 -1
  47. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CZcEYunb.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BPVevlAq.js +1 -1
  48. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BTwLgJ1W.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-Ciyhvsb-.js +1 -1
  49. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CG-h-rFD.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-Dh0oyhrR.js +1 -1
  50. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-Dboe-8V6.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CXHaL-YZ.js +1 -1
  51. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/graph-tZ08HzZK.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/graph-TD3vr6xg.js +1 -1
  52. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/index-D-5_8ubL.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/index-BdNVBp2k.js +2 -2
  53. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/index-nZn6VWSI.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/index-CenJZaSp.js +1 -1
  54. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/index-7bl4QiO-.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/index-SBxoponV.js +1 -1
  55. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DPDBxfuh.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-D5BYT4oh.js +1 -1
  56. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DvsTXFGC.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-Zpn0sf9-.js +1 -1
  57. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D5-VFkqZ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DtxGDGjW.js +1 -1
  58. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/layout-BEBRMmSj.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/layout-DdbLR-yH.js +1 -1
  59. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/linear-BvgwzI0z.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/linear-DGs0uozR.js +1 -1
  60. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Da46mOn1.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DccQM9It.js +7 -7
  61. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/mermaid.core-Qo_GUYb1.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/mermaid.core-CrH_OUva.js +5 -5
  62. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/min-BZ6414pQ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/min-eQ2Kg90V.js +1 -1
  63. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-oDcN0Um4.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BWdfnhI0.js +1 -1
  64. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-COleeNW3.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BOjN8K0d.js +1 -1
  65. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Z_hPRdQB.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DTXx1spJ.js +1 -1
  66. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-B1Wue_A0.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-C1fueAhg.js +1 -1
  67. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Cf_-8OQi.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BSLuceH4.js +1 -1
  68. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DCdMybhM.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-xcbbjK9h.js +1 -1
  69. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-CDtEvTSy.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BjTr1gKn.js +1 -1
  70. pythinker_code-0.37.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DNj8DWQe.js +1 -0
  71. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-L4SN0Qzd.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CDpaG8Uu.js +1 -1
  72. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CRV86YVy.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CMtpwAx0.js +1 -1
  73. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-B7g7WH25.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-PseE95Fp.js +1 -1
  74. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/index.html +1 -1
  75. pythinker_code-0.36.0/src/pythinker_code/prompts/compact.md +0 -73
  76. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/channel-B7BYgmgq.js +0 -1
  77. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-77NIBCwu.js +0 -1
  78. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-77NIBCwu.js +0 -1
  79. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/clone-DyMU09Zo.js +0 -1
  80. pythinker_code-0.36.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DTR50mz5.js +0 -1
  81. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/LICENSE +0 -0
  82. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/NOTICE +0 -0
  83. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/__init__.py +0 -0
  84. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/__main__.py +0 -0
  85. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  86. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/__init__.py +0 -0
  87. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/convert.py +0 -0
  88. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/host.py +0 -0
  89. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/mcp.py +0 -0
  90. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/server.py +0 -0
  91. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/session.py +0 -0
  92. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/tools.py +0 -0
  93. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/types.py +0 -0
  94. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/version.py +0 -0
  95. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  96. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  97. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  98. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  99. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  100. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  101. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  102. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  103. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  104. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/app.py +0 -0
  105. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  106. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  107. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  108. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/__init__.py +0 -0
  109. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/alibaba.py +0 -0
  110. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  111. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  112. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/deepseek.py +0 -0
  113. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  114. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  115. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/minimax.py +0 -0
  116. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/moonshot.py +0 -0
  117. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/oauth.py +0 -0
  118. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/ollama.py +0 -0
  119. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/openai.py +0 -0
  120. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  121. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/openrouter.py +0 -0
  122. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/platforms.py +0 -0
  123. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/z_ai.py +0 -0
  124. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/__init__.py +0 -0
  125. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/agent_runner.py +0 -0
  126. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/ids.py +0 -0
  127. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/manager.py +0 -0
  128. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/models.py +0 -0
  129. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/store.py +0 -0
  130. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/summary.py +0 -0
  131. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/background/worker.py +0 -0
  132. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/__main__.py +0 -0
  133. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  134. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/debug.py +0 -0
  135. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/export.py +0 -0
  136. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/info.py +0 -0
  137. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/mcp.py +0 -0
  138. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/plugin.py +0 -0
  139. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/review.py +0 -0
  140. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/secscan.py +0 -0
  141. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/security_scan.py +0 -0
  142. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/skill.py +0 -0
  143. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/toad.py +0 -0
  144. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/update.py +0 -0
  145. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/vis.py +0 -0
  146. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/web.py +0 -0
  147. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/config.py +0 -0
  148. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/constant.py +0 -0
  149. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/events.py +0 -0
  150. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/exception.py +0 -0
  151. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/execution_profiles.py +0 -0
  152. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/extensions.py +0 -0
  153. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/feedback.py +0 -0
  154. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/feedback_repo.py +0 -0
  155. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/file_restore.py +0 -0
  156. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/__init__.py +0 -0
  157. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/config.py +0 -0
  158. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/engine.py +0 -0
  159. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/events.py +0 -0
  160. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/runner.py +0 -0
  161. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/llm.py +0 -0
  162. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/__init__.py +0 -0
  163. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/consolidation.py +0 -0
  164. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/harvest.py +0 -0
  165. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/recall.py +0 -0
  166. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/recap.py +0 -0
  167. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/retriever.py +0 -0
  168. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/sanitize.py +0 -0
  169. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/metadata.py +0 -0
  170. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/native.py +0 -0
  171. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/__init__.py +0 -0
  172. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/llm.py +0 -0
  173. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/manager.py +0 -0
  174. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/models.py +0 -0
  175. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/notifier.py +0 -0
  176. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/store.py +0 -0
  177. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/wire.py +0 -0
  178. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/plugin/__init__.py +0 -0
  179. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/plugin/manager.py +0 -0
  180. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/plugin/tool.py +0 -0
  181. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/project_memory.py +0 -0
  182. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/prompt_templates.py +0 -0
  183. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/prompts/__init__.py +0 -0
  184. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/prompts/init.md +0 -0
  185. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/py.typed +0 -0
  186. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/scratchpad.py +0 -0
  187. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/session.py +0 -0
  188. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/session_cleanup.py +0 -0
  189. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/session_fork.py +0 -0
  190. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/session_recap.py +0 -0
  191. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/session_state.py +0 -0
  192. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/share.py +0 -0
  193. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/__init__.py +0 -0
  194. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  195. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  196. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  197. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/lockfile.py +0 -0
  198. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  199. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  200. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  201. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  202. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  203. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  204. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  205. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  206. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  207. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  208. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  209. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  210. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  211. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  212. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/__init__.py +0 -0
  213. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/approval.py +0 -0
  214. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/btw.py +0 -0
  215. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/compaction.py +0 -0
  216. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  217. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/context.py +0 -0
  218. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/deliberation.py +0 -0
  219. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  220. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  221. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  222. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  223. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  224. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/message.py +0 -0
  225. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/permission.py +0 -0
  226. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/slash.py +0 -0
  227. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/__init__.py +0 -0
  228. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/builder.py +0 -0
  229. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/core.py +0 -0
  230. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/discovery.py +0 -0
  231. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/git_context.py +0 -0
  232. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/models.py +0 -0
  233. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/output.py +0 -0
  234. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/registry.py +0 -0
  235. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/runner.py +0 -0
  236. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/store.py +0 -0
  237. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  238. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/config.py +0 -0
  239. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/crash.py +0 -0
  240. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/errors.py +0 -0
  241. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  242. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/otel.py +0 -0
  243. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  244. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/sink.py +0 -0
  245. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/thinking.py +0 -0
  246. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  247. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/__init__.py +0 -0
  248. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  249. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/agent/description.md +0 -0
  250. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  251. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  252. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  253. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  254. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/input.md +0 -0
  255. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/list.md +0 -0
  256. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/output.md +0 -0
  257. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/stop.md +0 -0
  258. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/display.py +0 -0
  259. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  260. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  261. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  262. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/glob.md +0 -0
  263. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/glob.py +0 -0
  264. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/grep.md +0 -0
  265. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  266. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  267. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read.md +0 -0
  268. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  269. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  270. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/replace.md +0 -0
  271. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/replace.py +0 -0
  272. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/utils.py +0 -0
  273. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/write.md +0 -0
  274. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/write.py +0 -0
  275. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  276. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  277. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  278. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/description.md +0 -0
  279. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  280. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  281. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  282. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  283. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  284. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  285. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  286. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  287. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  288. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  289. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/skill/description.md +0 -0
  290. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/test.py +0 -0
  291. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  292. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/think/think.md +0 -0
  293. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  294. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  295. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/utils.py +0 -0
  296. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  297. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  298. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  299. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/search.md +0 -0
  300. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/search.py +0 -0
  301. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/__init__.py +0 -0
  302. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  303. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  304. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  305. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
  306. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  307. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  308. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  309. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  310. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  311. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  312. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  313. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  314. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  315. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  316. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  317. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  318. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  319. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  320. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  321. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  322. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/console.py +0 -0
  323. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  324. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  325. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  326. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  327. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  328. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  329. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  330. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  331. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  332. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  333. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  334. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  335. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  336. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  337. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  338. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  339. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  340. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  341. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  342. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  343. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  344. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  345. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  346. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  347. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  348. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/slash.py +0 -0
  349. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  350. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  351. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  352. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  353. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  354. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  355. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  356. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  357. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  358. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  359. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  360. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  361. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  362. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  363. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  364. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  365. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  366. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  367. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  368. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  369. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  370. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  371. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  372. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  373. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  374. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  375. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/update.py +0 -0
  376. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  377. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  378. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  379. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  380. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  381. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  382. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  383. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  384. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  385. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  386. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  387. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  388. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  389. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  390. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  391. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  392. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  393. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  394. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  395. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  396. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  397. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  398. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  399. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  400. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  401. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  402. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  403. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/theme.py +0 -0
  404. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/tui_config.py +0 -0
  405. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  406. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/__init__.py +0 -0
  407. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  408. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  409. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/broadcast.py +0 -0
  410. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/changelog.py +0 -0
  411. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/clipboard.py +0 -0
  412. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/datetime.py +0 -0
  413. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/diff.py +0 -0
  414. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/editor.py +0 -0
  415. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/environment.py +0 -0
  416. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/envvar.py +0 -0
  417. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/export.py +0 -0
  418. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/file_filter.py +0 -0
  419. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  420. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/gitignore.py +0 -0
  421. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/io.py +0 -0
  422. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/logging.py +0 -0
  423. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/media_tags.py +0 -0
  424. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/message.py +0 -0
  425. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/path.py +0 -0
  426. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/proctitle.py +0 -0
  427. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/proxy.py +0 -0
  428. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  429. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  430. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  431. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  432. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  433. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  434. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  435. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  436. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/sensitive.py +0 -0
  437. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/server.py +0 -0
  438. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/signals.py +0 -0
  439. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  440. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  441. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/string.py +0 -0
  442. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  443. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/term.py +0 -0
  444. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/typing.py +0 -0
  445. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/__init__.py +0 -0
  446. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  447. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  448. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  449. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/system.py +0 -0
  450. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/app.py +0 -0
  451. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  452. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  453. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  454. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  455. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  456. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  457. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  458. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  459. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  460. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  461. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/index.html +0 -0
  462. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/__init__.py +0 -0
  463. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/__init__.py +0 -0
  464. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/config.py +0 -0
  465. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/open_in.py +0 -0
  466. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/sessions.py +0 -0
  467. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/app.py +0 -0
  468. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/auth.py +0 -0
  469. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/models.py +0 -0
  470. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  471. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/messages.py +0 -0
  472. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/process.py +0 -0
  473. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/worker.py +0 -0
  474. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/_headers +0 -0
  475. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  476. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  477. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  478. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  479. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  480. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  481. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  482. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  483. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  484. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  485. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  486. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  487. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  488. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  489. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  490. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  491. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  492. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  493. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  494. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  495. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  496. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  497. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  498. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  499. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  500. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  501. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  502. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  503. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  504. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  505. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  506. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  507. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  508. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  509. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  510. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  511. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  512. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  513. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  514. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  515. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  516. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  517. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  518. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  519. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  520. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  521. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  522. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  523. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  524. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  525. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  526. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  527. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  528. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  529. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  530. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  531. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  532. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  533. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  534. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  535. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  536. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  537. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  538. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  539. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  540. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  541. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  542. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  543. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  544. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  545. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  546. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  547. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  548. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  549. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  550. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  551. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  552. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  553. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  554. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  555. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  556. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  557. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  558. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  559. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  560. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  561. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  562. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  563. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  564. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  565. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  566. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  567. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  568. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  569. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  570. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  571. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  572. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  573. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  574. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  575. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  576. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  577. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  578. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  579. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  580. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  581. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  582. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  583. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  584. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  585. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  586. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  587. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  588. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  589. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  590. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  591. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  592. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  593. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  594. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  595. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  596. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  597. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  598. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  599. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  600. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  601. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  602. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  603. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  604. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  605. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  606. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  607. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  608. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  609. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  610. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  611. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  612. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  613. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  614. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  615. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  616. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  617. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  618. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  619. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  620. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  621. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  622. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  623. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  624. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  625. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  626. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  627. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  628. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  629. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  630. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  631. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  632. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  633. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  634. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  635. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  636. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  637. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  638. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  639. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  640. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  641. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  642. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  643. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  644. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  645. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  646. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  647. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  648. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  649. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  650. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  651. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  652. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  653. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  654. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  655. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  656. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  657. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  658. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  659. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  660. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  661. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  662. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  663. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  664. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  665. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  666. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  667. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  668. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  669. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  670. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  671. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  672. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  673. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  674. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  675. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  676. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  677. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  678. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  679. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  680. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  681. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  682. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  683. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  684. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  685. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  686. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  687. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  688. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  689. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  690. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  691. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  692. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  693. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  694. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  695. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  696. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  697. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  698. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  699. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  700. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  701. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  702. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  703. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  704. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  705. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  706. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  707. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  708. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  709. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  710. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  711. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  712. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  713. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  714. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  715. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  716. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  717. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  718. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  719. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  720. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  721. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  722. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  723. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  724. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  725. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  726. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  727. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  728. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  729. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  730. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  731. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  732. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  733. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  734. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  735. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  736. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  737. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  738. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  739. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  740. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  741. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  742. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  743. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  744. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  745. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  746. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  747. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  748. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  749. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  750. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  751. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  752. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  753. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  754. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  755. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  756. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  757. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  758. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  759. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  760. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  761. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  762. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  763. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  764. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  765. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  766. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  767. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  768. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  769. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  770. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  771. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  772. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  773. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  774. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  775. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  776. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  777. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  778. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  779. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  780. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  781. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  782. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  783. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  784. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  785. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  786. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  787. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  788. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  789. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  790. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  791. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  792. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  793. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  794. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  795. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  796. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  797. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  798. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  799. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  800. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  801. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  802. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  803. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  804. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  805. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  806. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  807. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  808. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  809. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  810. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  811. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  812. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  813. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  814. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  815. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  816. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  817. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  818. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  819. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  820. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  821. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  822. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  823. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  824. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  825. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  826. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  827. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  828. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  829. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  830. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  831. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  832. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  833. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  834. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  835. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  836. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  837. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  838. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  839. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  840. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  841. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  842. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  843. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  844. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  845. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  846. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  847. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  848. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  849. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  850. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  851. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  852. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  853. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  854. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  855. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  856. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  857. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  858. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  859. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  860. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  861. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  862. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/install.sh +0 -0
  863. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/logo.png +0 -0
  864. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/store/__init__.py +0 -0
  865. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/web/store/sessions.py +0 -0
  866. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/__init__.py +0 -0
  867. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/file.py +0 -0
  868. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  869. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/protocol.py +0 -0
  870. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/root_hub.py +0 -0
  871. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/serde.py +0 -0
  872. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/server.py +0 -0
  873. {pythinker_code-0.36.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.36.0
3
+ Version: 0.37.0
4
4
  Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Pythoughts-labs
@@ -115,13 +115,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.36.0
118
+ ## 🆕 What's New in 0.37.0
119
119
 
120
- - **Alibaba DashScope multi-region fallback.** China-region keys now auto-detect the endpoint mismatch and reconfigure correctly instead of showing a misleading "API key is wrong" error.
121
- - **Alibaba Token Plan compatibility (`sk-ws-`).** `/login alibaba` now asks for the dedicated workspace endpoint, avoids unroutable Kimi entries on those endpoints, and uses DeepSeek V3.2's working non-streaming mode.
122
- - **Alibaba model catalog refresh.** Qwen3.7 Plus, Qwen3 Coder Plus, and Qwen3 Coder Flash added; deprecated `kimi-k2.5`, `glm-5`, and `MiniMax-M2.5` removed.
120
+ - **Agent runtime tool visibility hardening.** `PythinkerToolset` now gates tool advertisements by execution policy, permission profile, root/subagent role, and plan-mode state execution-time guards remain as defense in depth.
121
+ - **Agent design upgrades.** New `ask` and `debug` primary agents selectable with `--agent`, a `scout` subagent for docs/API freshness research, richer spec metadata, and stable compaction summaries.
122
+ - **Prompt-injection defense: `UntrustedData` wrapper.** External file and web content is wrapped in signed `<untrusted_data>` tags before reaching the LLM, with breakout-prevention escaping.
123
+ - **Agent boundary artifacts.** Typed `CodingArtifact`/`VerificationResult` and `VulnerabilityArtifact`/`AuditVerdict` dataclasses enforce a strict information barrier between coder and verifier subagents.
124
+ - **Recon-first `planner` subagent.** New read-only planner decomposes tasks into parallel seed descriptions via `<recon_seeds>` JSON for structured fan-out before workers start.
125
+ - **`coder` artifact contract.** Structured `<coding_artifact>` handoff block at end of every coder response enables direct consumption by the `verifier` subagent.
123
126
 
124
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.36.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
127
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.37.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
125
128
 
126
129
 
127
130
  ---
@@ -211,7 +214,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
211
214
 
212
215
  | Platform | Recommended install | Artifact source |
213
216
  |---|---|---|
214
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.36.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.37.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
215
218
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
219
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
217
220
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -239,7 +242,7 @@ pythinker # start the interactive TUI
239
242
 
240
243
  ### 🪟 Windows — native installer
241
244
 
242
- `PythinkerSetup-0.36.0.exe` is a signed* Inno Setup wizard. Installs per-user
245
+ `PythinkerSetup-0.37.0.exe` is a signed* Inno Setup wizard. Installs per-user
243
246
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
244
247
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
245
248
  the change. **No UAC prompt.**
@@ -250,13 +253,13 @@ irm https://pythinker.com/install.ps1 | iex
250
253
 
251
254
  # Or manually download the installer + checksum from the Releases page,
252
255
  # verify with Get-FileHash, then run:
253
- .\PythinkerSetup-0.36.0.exe
256
+ .\PythinkerSetup-0.37.0.exe
254
257
 
255
258
  # Open a fresh PowerShell
256
259
  pythinker --version
257
260
  ```
258
261
 
259
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.36.0.exe /ALLUSERS`
262
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.37.0.exe /ALLUSERS`
260
263
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
261
264
 
262
265
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -307,26 +310,26 @@ attached to every GitHub Release.
307
310
 
308
311
  ```sh
309
312
  # Debian / Ubuntu (x86_64)
310
- sudo dpkg -i pythinker-code_0.36.0_amd64.deb
313
+ sudo dpkg -i pythinker-code_0.37.0_amd64.deb
311
314
  sudo apt-get install -f # only if dpkg reports missing deps
312
315
 
313
316
  # Debian / Ubuntu (ARM64)
314
- sudo dpkg -i pythinker-code_0.36.0_arm64.deb
317
+ sudo dpkg -i pythinker-code_0.37.0_arm64.deb
315
318
 
316
319
  # Fedora / RHEL / openSUSE (x86_64)
317
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm
318
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm.sha256
319
- sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256
320
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm
321
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm.sha256
322
+ sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256
320
323
  # Fedora / RHEL:
321
- sudo dnf install ./pythinker-code-0.36.0.x86_64.rpm
324
+ sudo dnf install ./pythinker-code-0.37.0.x86_64.rpm
322
325
  # openSUSE:
323
- sudo zypper install ./pythinker-code-0.36.0.x86_64.rpm
326
+ sudo zypper install ./pythinker-code-0.37.0.x86_64.rpm
324
327
 
325
328
  # Fedora / RHEL (aarch64)
326
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm
327
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm.sha256
328
- sha256sum -c pythinker-code-0.36.0.aarch64.rpm.sha256
329
- sudo dnf install ./pythinker-code-0.36.0.aarch64.rpm
329
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm
330
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm.sha256
331
+ sha256sum -c pythinker-code-0.37.0.aarch64.rpm.sha256
332
+ sudo dnf install ./pythinker-code-0.37.0.aarch64.rpm
330
333
  ```
331
334
 
332
335
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -335,8 +338,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
335
338
  **Verify before install:**
336
339
 
337
340
  ```sh
338
- sha256sum -c pythinker-code_0.36.0_amd64.deb.sha256 # Debian/Ubuntu
339
- sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256 # Fedora/RHEL
341
+ sha256sum -c pythinker-code_0.37.0_amd64.deb.sha256 # Debian/Ubuntu
342
+ sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256 # Fedora/RHEL
340
343
  ```
341
344
 
342
345
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,13 +50,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.36.0
53
+ ## 🆕 What's New in 0.37.0
54
54
 
55
- - **Alibaba DashScope multi-region fallback.** China-region keys now auto-detect the endpoint mismatch and reconfigure correctly instead of showing a misleading "API key is wrong" error.
56
- - **Alibaba Token Plan compatibility (`sk-ws-`).** `/login alibaba` now asks for the dedicated workspace endpoint, avoids unroutable Kimi entries on those endpoints, and uses DeepSeek V3.2's working non-streaming mode.
57
- - **Alibaba model catalog refresh.** Qwen3.7 Plus, Qwen3 Coder Plus, and Qwen3 Coder Flash added; deprecated `kimi-k2.5`, `glm-5`, and `MiniMax-M2.5` removed.
55
+ - **Agent runtime tool visibility hardening.** `PythinkerToolset` now gates tool advertisements by execution policy, permission profile, root/subagent role, and plan-mode state execution-time guards remain as defense in depth.
56
+ - **Agent design upgrades.** New `ask` and `debug` primary agents selectable with `--agent`, a `scout` subagent for docs/API freshness research, richer spec metadata, and stable compaction summaries.
57
+ - **Prompt-injection defense: `UntrustedData` wrapper.** External file and web content is wrapped in signed `<untrusted_data>` tags before reaching the LLM, with breakout-prevention escaping.
58
+ - **Agent boundary artifacts.** Typed `CodingArtifact`/`VerificationResult` and `VulnerabilityArtifact`/`AuditVerdict` dataclasses enforce a strict information barrier between coder and verifier subagents.
59
+ - **Recon-first `planner` subagent.** New read-only planner decomposes tasks into parallel seed descriptions via `<recon_seeds>` JSON for structured fan-out before workers start.
60
+ - **`coder` artifact contract.** Structured `<coding_artifact>` handoff block at end of every coder response enables direct consumption by the `verifier` subagent.
58
61
 
59
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.36.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
62
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.37.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
60
63
 
61
64
 
62
65
  ---
@@ -146,7 +149,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
146
149
 
147
150
  | Platform | Recommended install | Artifact source |
148
151
  |---|---|---|
149
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.36.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.37.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
150
153
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
154
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
152
155
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -174,7 +177,7 @@ pythinker # start the interactive TUI
174
177
 
175
178
  ### 🪟 Windows — native installer
176
179
 
177
- `PythinkerSetup-0.36.0.exe` is a signed* Inno Setup wizard. Installs per-user
180
+ `PythinkerSetup-0.37.0.exe` is a signed* Inno Setup wizard. Installs per-user
178
181
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
179
182
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
180
183
  the change. **No UAC prompt.**
@@ -185,13 +188,13 @@ irm https://pythinker.com/install.ps1 | iex
185
188
 
186
189
  # Or manually download the installer + checksum from the Releases page,
187
190
  # verify with Get-FileHash, then run:
188
- .\PythinkerSetup-0.36.0.exe
191
+ .\PythinkerSetup-0.37.0.exe
189
192
 
190
193
  # Open a fresh PowerShell
191
194
  pythinker --version
192
195
  ```
193
196
 
194
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.36.0.exe /ALLUSERS`
197
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.37.0.exe /ALLUSERS`
195
198
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
196
199
 
197
200
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -242,26 +245,26 @@ attached to every GitHub Release.
242
245
 
243
246
  ```sh
244
247
  # Debian / Ubuntu (x86_64)
245
- sudo dpkg -i pythinker-code_0.36.0_amd64.deb
248
+ sudo dpkg -i pythinker-code_0.37.0_amd64.deb
246
249
  sudo apt-get install -f # only if dpkg reports missing deps
247
250
 
248
251
  # Debian / Ubuntu (ARM64)
249
- sudo dpkg -i pythinker-code_0.36.0_arm64.deb
252
+ sudo dpkg -i pythinker-code_0.37.0_arm64.deb
250
253
 
251
254
  # Fedora / RHEL / openSUSE (x86_64)
252
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm
253
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm.sha256
254
- sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256
255
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm
256
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm.sha256
257
+ sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256
255
258
  # Fedora / RHEL:
256
- sudo dnf install ./pythinker-code-0.36.0.x86_64.rpm
259
+ sudo dnf install ./pythinker-code-0.37.0.x86_64.rpm
257
260
  # openSUSE:
258
- sudo zypper install ./pythinker-code-0.36.0.x86_64.rpm
261
+ sudo zypper install ./pythinker-code-0.37.0.x86_64.rpm
259
262
 
260
263
  # Fedora / RHEL (aarch64)
261
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm
262
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm.sha256
263
- sha256sum -c pythinker-code-0.36.0.aarch64.rpm.sha256
264
- sudo dnf install ./pythinker-code-0.36.0.aarch64.rpm
264
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm
265
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm.sha256
266
+ sha256sum -c pythinker-code-0.37.0.aarch64.rpm.sha256
267
+ sudo dnf install ./pythinker-code-0.37.0.aarch64.rpm
265
268
  ```
266
269
 
267
270
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -270,8 +273,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
270
273
  **Verify before install:**
271
274
 
272
275
  ```sh
273
- sha256sum -c pythinker-code_0.36.0_amd64.deb.sha256 # Debian/Ubuntu
274
- sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256 # Fedora/RHEL
276
+ sha256sum -c pythinker-code_0.37.0_amd64.deb.sha256 # Debian/Ubuntu
277
+ sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256 # Fedora/RHEL
275
278
  ```
276
279
 
277
280
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.36.0"
3
+ version = "0.37.0"
4
4
  description = "Pythinker — an agentic CLI developed by Pythoughts-labs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,17 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.37.0 (2026-06-07)
19
+
20
+ - **Agent runtime tool visibility hardening.** `PythinkerToolset` now filters the tools advertised to the model by active execution policy, permission profile, root/subagent role, and plan-mode state while preserving execution-time guards as defense in depth.
21
+ - **Agent design upgrades.** Agent specs now carry mode/hidden/step/model-parameter metadata, built-in `ask` and `debug` primary agents are selectable with `--agent`, the new `scout` subagent handles external docs/API freshness research, and compaction summaries use a stable handoff-oriented structure.
22
+ - **Prompt-injection defense: `UntrustedData` wrapper.** All external content returned by `ReadFile` and `FetchURL` is now wrapped in `<untrusted_data id="NONCE">…</untrusted_data>` tags before being passed to the LLM, providing a clear boundary between trusted instructions and untrusted file/web content. The `UntrustedData` primitive escapes embedded closing tags to prevent breakout attacks.
23
+ - **Agent boundary artifacts.** New `CodingArtifact` / `VerificationResult` and `VulnerabilityArtifact` / `AuditVerdict` frozen dataclasses in `pythinker_code.utils.artifacts` enforce a typed information barrier between coder and verifier subagents.
24
+ - **Recon-first `planner` subagent.** A new read-only `planner` built-in agent type decomposes open-ended tasks into distinct parallel seed descriptions emitted as `<recon_seeds>` JSON, enabling structured fan-out before parallel workers start.
25
+ - **Coder artifact contract.** The `coder` subagent now emits a `<coding_artifact>` JSON block at the end of every response, providing structured handoff data (`files_changed`, `test_command`, `expected_behavior`, optional `edge_cases_claimed`) that the `verifier` subagent can consume directly.
26
+
27
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.37.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
28
+
18
29
  ## 0.36.0 (2026-06-05)
19
30
 
20
31
  - **Alibaba DashScope multi-region fallback.** Logging in with a China-region key (`dashscope.aliyuncs.com`) against the default US Virginia endpoint now auto-detects the mismatch and reconfigures for the correct endpoint rather than failing with a misleading "API key is wrong" error.
@@ -47,6 +47,12 @@ agent:
47
47
  plan:
48
48
  path: ./plan.yaml
49
49
  description: "Read-only implementation planning and architecture design."
50
+ planner:
51
+ path: ./planner.yaml
52
+ description: "Read-only recon planner that decomposes tasks into distinct parallel seeds."
53
+ scout:
54
+ path: ./scout.yaml
55
+ description: "Read-only external docs, dependency-source, and API freshness researcher."
50
56
  review:
51
57
  path: ./review.yaml
52
58
  description: "Read-only code review with severity-scored findings."
@@ -0,0 +1,62 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ name: "ask"
5
+ mode: primary
6
+ system_prompt_args:
7
+ ROLE_ADDITIONAL: |
8
+ You are in Ask mode: a read-only assistant for answering questions, explaining code,
9
+ and recommending next steps without modifying files.
10
+
11
+ Ask-mode rules:
12
+ - Do not edit files, write plans to disk, launch mutating tools, commit, stage, push, or run commands that modify the system.
13
+ - Use repository evidence before answering codebase, architecture, debugging, or configuration questions.
14
+ - Use direct reads for known files and exploration subagents or searches for broader questions.
15
+ - If the user asks for implementation, explain the likely approach and say they should switch to the default/code agent or explicitly ask you to proceed with changes.
16
+ - Keep answers concise and cite paths or commands when they are load-bearing.
17
+
18
+ Final response contract:
19
+ - Start with the direct answer.
20
+ - Include evidence bullets only when the answer depends on repository inspection.
21
+ - End with blockers only if missing context prevents a reliable answer.
22
+ when_to_use: |
23
+ Use as a primary read-only mode for answering questions and explaining code without changing the workspace.
24
+ allowed_tools:
25
+ - "pythinker_code.tools.agent:Agent"
26
+ - "pythinker_code.tools.agent:RunAgents"
27
+ - "pythinker_code.tools.skill:ReadSkill"
28
+ - "pythinker_code.tools.ask_user:AskUserQuestion"
29
+ - "pythinker_code.tools.file:ReadFile"
30
+ - "pythinker_code.tools.file:ReadMediaFile"
31
+ - "pythinker_code.tools.file:Glob"
32
+ - "pythinker_code.tools.file:Grep"
33
+ - "pythinker_code.tools.file:SmartSearch"
34
+ - "pythinker_code.tools.web:SearchWeb"
35
+ - "pythinker_code.tools.web:FetchURL"
36
+ exclude_tools:
37
+ - "pythinker_code.tools.todo:SetTodoList"
38
+ - "pythinker_code.tools.memory:Memory"
39
+ - "pythinker_code.tools.scratchpad:Scratchpad"
40
+ - "pythinker_code.tools.background:TaskInput"
41
+ - "pythinker_code.tools.background:TaskHandoff"
42
+ - "pythinker_code.tools.background:TaskStop"
43
+ - "pythinker_code.tools.file:WriteFile"
44
+ - "pythinker_code.tools.file:StrReplaceFile"
45
+ - "pythinker_code.tools.plan:ExitPlanMode"
46
+ - "pythinker_code.tools.plan.enter:EnterPlanMode"
47
+ subagents:
48
+ explore:
49
+ path: ./explore.yaml
50
+ description: "Fast codebase exploration with prompt-enforced read-only behavior."
51
+ plan:
52
+ path: ./plan.yaml
53
+ description: "Read-only implementation planning and architecture design."
54
+ review:
55
+ path: ./review.yaml
56
+ description: "Read-only code review with severity-scored findings."
57
+ debugger:
58
+ path: ./debugger.yaml
59
+ description: "Failure/log/stack-trace root-cause analysis with reproduction evidence."
60
+ judge:
61
+ path: ./judge.yaml
62
+ description: "Independent final quality gate for answers and reports."
@@ -31,6 +31,21 @@ agent:
31
31
  Bullet list of remaining risks or `None observed.`.
32
32
  ### BLOCKERS
33
33
  Bullet list of anything that stopped completion, or `None.`.
34
+
35
+ Artifact contract: Before finishing, you MUST emit your result as a structured artifact.
36
+ Wrap it in <coding_artifact> tags on its own line at the very end of your final message:
37
+
38
+ <coding_artifact>
39
+ {
40
+ "files_changed": ["path/to/file.py"],
41
+ "test_command": "make test",
42
+ "expected_behavior": "...",
43
+ "edge_cases_claimed": ["..."]
44
+ }
45
+ </coding_artifact>
46
+
47
+ Do not include reasoning, logs, or intermediate output inside the tags — only the JSON fields above.
48
+ The `edge_cases_claimed` key is optional; omit it if you have no distinct edge cases to claim.
34
49
  when_to_use: |
35
50
  Use this agent for non-trivial software engineering work that may require reading files, editing code, running commands, and returning a compact but technically complete summary to the parent agent.
36
51
  allowed_tools:
@@ -0,0 +1,67 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ name: "debug"
5
+ mode: primary
6
+ system_prompt_args:
7
+ ROLE_ADDITIONAL: |
8
+ You are in Debug mode: a systematic root-cause diagnostician.
9
+
10
+ Debug-mode protocol:
11
+ - Start by identifying 5-7 plausible causes, then narrow to the 1-2 most likely from evidence.
12
+ - Reproduce or inspect the failure before proposing a fix whenever a bounded command, log, test, or trace is available.
13
+ - Separate confirmed facts, likely hypotheses, and unknowns.
14
+ - Prefer diagnostic reads, failing tests, logs, recent diffs, callers/callees, and configuration evidence over speculation.
15
+ - Do not make broad refactors. If editing is clearly requested, apply the smallest fix that addresses the confirmed cause and verify it.
16
+ - If the cause is not confirmed, ask for the missing log, failing command, environment, or reproduction steps instead of guessing.
17
+
18
+ Final response contract:
19
+ ### SUMMARY
20
+ Likely root cause, confidence, and whether a fix was applied.
21
+ ### EVIDENCE
22
+ Concrete logs, commands, files, lines, or reproduction results.
23
+ ### CHANGES
24
+ Modified paths and reasons, or `None.`.
25
+ ### RISKS
26
+ Alternate hypotheses or residual uncertainty.
27
+ ### BLOCKERS
28
+ Missing reproduction context, or `None.`.
29
+ when_to_use: |
30
+ Use as a primary mode for failing tests, runtime errors, stack traces, flaky failures, and debugging requests.
31
+ allowed_tools:
32
+ - "pythinker_code.tools.agent:Agent"
33
+ - "pythinker_code.tools.agent:RunAgents"
34
+ - "pythinker_code.tools.skill:ReadSkill"
35
+ - "pythinker_code.tools.ask_user:AskUserQuestion"
36
+ - "pythinker_code.tools.todo:SetTodoList"
37
+ - "pythinker_code.tools.shell:Shell"
38
+ - "pythinker_code.tools.file:ReadFile"
39
+ - "pythinker_code.tools.file:ReadMediaFile"
40
+ - "pythinker_code.tools.file:Glob"
41
+ - "pythinker_code.tools.file:Grep"
42
+ - "pythinker_code.tools.file:SmartSearch"
43
+ - "pythinker_code.tools.file:WriteFile"
44
+ - "pythinker_code.tools.file:StrReplaceFile"
45
+ - "pythinker_code.tools.web:SearchWeb"
46
+ - "pythinker_code.tools.web:FetchURL"
47
+ exclude_tools:
48
+ - "pythinker_code.tools.memory:Memory"
49
+ - "pythinker_code.tools.scratchpad:Scratchpad"
50
+ - "pythinker_code.tools.plan:ExitPlanMode"
51
+ - "pythinker_code.tools.plan.enter:EnterPlanMode"
52
+ subagents:
53
+ explore:
54
+ path: ./explore.yaml
55
+ description: "Fast codebase exploration with prompt-enforced read-only behavior."
56
+ debugger:
57
+ path: ./debugger.yaml
58
+ description: "Failure/log/stack-trace root-cause analysis with reproduction evidence."
59
+ implementer:
60
+ path: ./implementer.yaml
61
+ description: "Scoped implementation with minimal edits and verification."
62
+ verifier:
63
+ path: ./verifier.yaml
64
+ description: "Read-only validation runner for tests, lint, and builds."
65
+ judge:
66
+ path: ./judge.yaml
67
+ description: "Independent final quality gate for answers, reports, and code-change summaries."
@@ -0,0 +1,44 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ system_prompt_args:
5
+ ROLE_ADDITIONAL: |
6
+ You are now running as a subagent. All the `user` messages are sent by the main agent.
7
+ The main agent cannot see your context, it can only see your last message when you finish.
8
+
9
+ You are a Reconnaissance Planner. Your single objective is to analyze the request and
10
+ break it down into N distinct, non-overlapping task seeds for parallel workers.
11
+
12
+ CRITICAL RULES:
13
+ - Do not solve the problem. Do not write code. Do not fix anything.
14
+ - Each seed must provide a distinct starting angle (different file, subsystem, or hypothesis)
15
+ so that parallel workers exploring them will NOT duplicate effort or converge on the same solution.
16
+ - Aim for 3-5 seeds unless the task is clearly simpler or more complex.
17
+
18
+ Final response contract:
19
+ Your final message must contain ONLY the seeds block below — no preamble, no explanation,
20
+ no content before or after the tags:
21
+ <recon_seeds>
22
+ ["seed description 1", "seed description 2", ...]
23
+ </recon_seeds>
24
+
25
+ when_to_use: |
26
+ Use this agent before spawning N parallel workers on a large or open-ended task.
27
+ It partitions the problem space so workers start from distinct vantage points.
28
+
29
+ allowed_tools:
30
+ - "pythinker_code.tools.shell:Shell"
31
+ - "pythinker_code.tools.file:ReadFile"
32
+ - "pythinker_code.tools.file:Glob"
33
+ - "pythinker_code.tools.file:Grep"
34
+ - "pythinker_code.tools.file:SmartSearch"
35
+ exclude_tools:
36
+ - "pythinker_code.tools.agent:Agent"
37
+ - "pythinker_code.tools.ask_user:AskUserQuestion"
38
+ - "pythinker_code.tools.plan:ExitPlanMode"
39
+ - "pythinker_code.tools.plan.enter:EnterPlanMode"
40
+ - "pythinker_code.tools.file:WriteFile"
41
+ - "pythinker_code.tools.file:StrReplaceFile"
42
+ - "pythinker_code.tools.web:SearchWeb"
43
+ - "pythinker_code.tools.web:FetchURL"
44
+ subagents:
@@ -0,0 +1,55 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ system_prompt_args:
5
+ ROLE_ADDITIONAL: |
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
+
8
+ You are a read-only scout for external documentation, dependency source, upstream repositories, and third-party APIs.
9
+
10
+ Scout protocol:
11
+ - Prefer official docs, canonical repositories, package metadata, and source code over blog posts or memory.
12
+ - If the task names a library, SDK, cloud service, or framework, verify the current API shape before drawing conclusions.
13
+ - If local dependency source or vendored docs exist, inspect those before web research.
14
+ - Separate verified facts from inferred behavior and stale/unknown areas.
15
+ - Cite exact URLs, file paths, versions, and line ranges where available.
16
+ - Do not modify the user's workspace. Do not install dependencies. Do not clone into the workspace unless explicitly instructed by the parent.
17
+
18
+ Final response contract:
19
+ ### SUMMARY
20
+ Direct answer with the strongest verified source.
21
+ ### EVIDENCE
22
+ Bullet list of docs, URLs, source paths, versions, or command outputs.
23
+ ### CHANGES
24
+ Always write `None.`.
25
+ ### RISKS
26
+ Staleness, version mismatches, missing docs, or `None observed.`.
27
+ ### BLOCKERS
28
+ Network/auth/access limitations, or `None.`.
29
+ when_to_use: |
30
+ Use this agent for external libraries, SDK docs, upstream source comparisons, API freshness checks, and dependency behavior research.
31
+ allowed_tools:
32
+ - "pythinker_code.tools.shell:Shell"
33
+ - "pythinker_code.tools.file:ReadFile"
34
+ - "pythinker_code.tools.file:ReadMediaFile"
35
+ - "pythinker_code.tools.file:Glob"
36
+ - "pythinker_code.tools.file:Grep"
37
+ - "pythinker_code.tools.file:SmartSearch"
38
+ - "pythinker_code.tools.skill:ReadSkill"
39
+ - "pythinker_code.tools.web:SearchWeb"
40
+ - "pythinker_code.tools.web:FetchURL"
41
+ exclude_tools:
42
+ - "pythinker_code.tools.agent:Agent"
43
+ - "pythinker_code.tools.agent:RunAgents"
44
+ - "pythinker_code.tools.ask_user:AskUserQuestion"
45
+ - "pythinker_code.tools.todo:SetTodoList"
46
+ - "pythinker_code.tools.memory:Memory"
47
+ - "pythinker_code.tools.scratchpad:Scratchpad"
48
+ - "pythinker_code.tools.background:TaskInput"
49
+ - "pythinker_code.tools.background:TaskHandoff"
50
+ - "pythinker_code.tools.background:TaskStop"
51
+ - "pythinker_code.tools.file:WriteFile"
52
+ - "pythinker_code.tools.file:StrReplaceFile"
53
+ - "pythinker_code.tools.plan:ExitPlanMode"
54
+ - "pythinker_code.tools.plan.enter:EnterPlanMode"
55
+ subagents:
@@ -12,6 +12,10 @@ Your product name is **Pythinker** and your developer is **Pythoughts-labs**. Th
12
12
 
13
13
  Always write natural-language output in the same language as the user's latest human request, unless the user explicitly asks for another language. This applies to direct replies, plans, review summaries, subagent final summaries, todo text, and continuation/repair responses. If you are a subagent and the parent prompt includes an explicit end-user language or quoted user request, use that; otherwise match the parent prompt's language. Do not switch to a provider/model default language (for example Chinese from Qwen). Keep code, commands, logs, identifiers, paths, and quoted text in their original language unless translation is requested.
14
14
 
15
+ # CLI Response Style
16
+
17
+ Be direct and technical. Do not start replies with filler such as "Great", "Sure", "Okay", or "Certainly". Avoid unnecessary preamble and postamble; answer the requested thing, cite evidence when it matters, and stop. Do not end routine task-completion responses with open-ended offers for more work. Ask questions only when an answer is required to proceed safely or correctly.
18
+
15
19
  Your identity, in order of priority:
16
20
 
17
21
  1. **Code reviewer.** Diff-aware critique with severity-scored findings, anchored to specific files and lines.
@@ -33,6 +33,17 @@ agent:
33
33
  Bullet list of likely causes or follow-up fixes, or `None observed.`.
34
34
  ### BLOCKERS
35
35
  Bullet list of missing dependencies, unavailable commands, or `None.`.
36
+
37
+ Artifact receipt: Your input contains a <coding_artifact> block. You will receive ONLY the
38
+ structured fields from the coder — no conversation history, logs, or confidence scores.
39
+
40
+ Your job:
41
+ 1. Run artifact.test_command independently via Shell.
42
+ 2. Check that observed behavior matches artifact.expected_behavior.
43
+ 3. Actively try to break each claim in artifact.edge_cases_claimed.
44
+ 4. Report PASS / FAIL / FLAKY based solely on what you observe — not what the coder claimed.
45
+
46
+ Do not ask why the coder made their choices. You have only the artifact.
36
47
  when_to_use: |
37
48
  Use this agent when the parent needs tests, lint, type checks, builds, or other validation gates run and reported without applying fixes.
38
49
  allowed_tools:
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from pathlib import Path
5
- from typing import Any, NamedTuple, cast
5
+ from typing import Any, Literal, NamedTuple, cast
6
6
 
7
7
  import yaml
8
8
  from pydantic import BaseModel, Field
@@ -12,12 +12,16 @@ from pythinker_code.exception import AgentSpecError
12
12
  DEFAULT_AGENT_SPEC_VERSION = "1"
13
13
  SUPPORTED_AGENT_SPEC_VERSIONS = (DEFAULT_AGENT_SPEC_VERSION,)
14
14
 
15
+ type AgentMode = Literal["primary", "subagent", "all", "hidden"]
16
+
15
17
 
16
18
  def get_agents_dir() -> Path:
17
19
  return Path(__file__).parent / "agents"
18
20
 
19
21
 
20
22
  DEFAULT_AGENT_FILE = get_agents_dir() / "default" / "agent.yaml"
23
+ ASK_AGENT_FILE = get_agents_dir() / "default" / "ask.yaml"
24
+ DEBUG_AGENT_FILE = get_agents_dir() / "default" / "debug.yaml"
21
25
  OKABE_AGENT_FILE = get_agents_dir() / "okabe" / "agent.yaml"
22
26
 
23
27
 
@@ -40,6 +44,13 @@ class AgentSpec(BaseModel):
40
44
  default_factory=dict, description="System prompt arguments"
41
45
  )
42
46
  model: str | None = Field(default=None, description="Default model alias")
47
+ mode: AgentMode | None = Field(
48
+ default=None, description="Agent mode: primary, subagent, all, hidden"
49
+ )
50
+ hidden: bool | None = Field(default=None, description="Hide this agent from default selection")
51
+ steps: int | None = Field(default=None, ge=1, description="Maximum steps per turn")
52
+ temperature: float | None = Field(default=None, ge=0, le=2, description="Model temperature")
53
+ top_p: float | None = Field(default=None, ge=0, le=1, description="Model top-p")
43
54
  when_to_use: str | None = Field(default=None, description="Usage guidance")
44
55
  tools: list[str] | None | Inherit = Field(default=inherit, description="Tools") # required
45
56
  allowed_tools: list[str] | None | Inherit = Field(default=inherit, description="Allowed tools")
@@ -66,6 +77,11 @@ class ResolvedAgentSpec:
66
77
  system_prompt_path: Path
67
78
  system_prompt_args: dict[str, str]
68
79
  model: str | None
80
+ mode: AgentMode
81
+ hidden: bool
82
+ steps: int | None
83
+ temperature: float | None
84
+ top_p: float | None
69
85
  when_to_use: str
70
86
  tools: list[str]
71
87
  allowed_tools: list[str] | None
@@ -100,6 +116,11 @@ def load_agent_spec(agent_file: Path) -> ResolvedAgentSpec:
100
116
  system_prompt_path=agent_spec.system_prompt_path,
101
117
  system_prompt_args=agent_spec.system_prompt_args,
102
118
  model=agent_spec.model,
119
+ mode=agent_spec.mode or "primary",
120
+ hidden=bool(agent_spec.hidden),
121
+ steps=agent_spec.steps,
122
+ temperature=agent_spec.temperature,
123
+ top_p=agent_spec.top_p,
103
124
  when_to_use=agent_spec.when_to_use or "",
104
125
  tools=agent_spec.tools or [],
105
126
  allowed_tools=agent_spec.allowed_tools,
@@ -149,6 +170,16 @@ def _load_agent_spec(agent_file: Path) -> AgentSpec:
149
170
  base_agent_spec.system_prompt_args[k] = v
150
171
  if agent_spec.model is not None:
151
172
  base_agent_spec.model = agent_spec.model
173
+ if agent_spec.mode is not None:
174
+ base_agent_spec.mode = agent_spec.mode
175
+ if agent_spec.hidden is not None:
176
+ base_agent_spec.hidden = agent_spec.hidden
177
+ if agent_spec.steps is not None:
178
+ base_agent_spec.steps = agent_spec.steps
179
+ if agent_spec.temperature is not None:
180
+ base_agent_spec.temperature = agent_spec.temperature
181
+ if agent_spec.top_p is not None:
182
+ base_agent_spec.top_p = agent_spec.top_p
152
183
  if agent_spec.when_to_use is not None:
153
184
  base_agent_spec.when_to_use = agent_spec.when_to_use
154
185
  if not isinstance(agent_spec.tools, Inherit):