pythinker-code 0.39.0__tar.gz โ†’ 0.40.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 (1070) hide show
  1. pythinker_code-0.40.0/PKG-INFO +878 -0
  2. pythinker_code-0.40.0/README.md +813 -0
  3. pythinker_code-0.40.0/pyproject.toml +224 -0
  4. pythinker_code-0.40.0/src/pythinker_code/CHANGELOG.md +471 -0
  5. pythinker_code-0.40.0/src/pythinker_code/__main__.py +93 -0
  6. pythinker_code-0.40.0/src/pythinker_code/acp/host.py +304 -0
  7. pythinker_code-0.40.0/src/pythinker_code/agents/default/ask.yaml +70 -0
  8. pythinker_code-0.40.0/src/pythinker_code/agents/default/code_reviewer.yaml +74 -0
  9. pythinker_code-0.40.0/src/pythinker_code/agents/default/coder.yaml +88 -0
  10. pythinker_code-0.40.0/src/pythinker_code/agents/default/debug.yaml +81 -0
  11. pythinker_code-0.40.0/src/pythinker_code/agents/default/debugger.yaml +56 -0
  12. pythinker_code-0.40.0/src/pythinker_code/agents/default/explore.yaml +67 -0
  13. pythinker_code-0.40.0/src/pythinker_code/agents/default/implementer.yaml +70 -0
  14. pythinker_code-0.40.0/src/pythinker_code/agents/default/judge.yaml +69 -0
  15. pythinker_code-0.40.0/src/pythinker_code/agents/default/plan.yaml +77 -0
  16. pythinker_code-0.40.0/src/pythinker_code/agents/default/planner.yaml +42 -0
  17. pythinker_code-0.40.0/src/pythinker_code/agents/default/review.yaml +70 -0
  18. pythinker_code-0.40.0/src/pythinker_code/agents/default/scout.yaml +67 -0
  19. pythinker_code-0.40.0/src/pythinker_code/agents/default/security_reviewer.yaml +66 -0
  20. pythinker_code-0.40.0/src/pythinker_code/agents/default/system.md +359 -0
  21. pythinker_code-0.40.0/src/pythinker_code/agents/default/verifier.yaml +82 -0
  22. pythinker_code-0.40.0/src/pythinker_code/agentspec.py +209 -0
  23. pythinker_code-0.40.0/src/pythinker_code/app.py +936 -0
  24. pythinker_code-0.40.0/src/pythinker_code/approval_runtime/runtime.py +252 -0
  25. pythinker_code-0.40.0/src/pythinker_code/auth/alibaba.py +437 -0
  26. pythinker_code-0.40.0/src/pythinker_code/auth/lm_studio.py +425 -0
  27. pythinker_code-0.40.0/src/pythinker_code/auth/oauth.py +1185 -0
  28. pythinker_code-0.40.0/src/pythinker_code/auth/ollama.py +293 -0
  29. pythinker_code-0.40.0/src/pythinker_code/auth/openai/__init__.py +89 -0
  30. pythinker_code-0.40.0/src/pythinker_code/auth/openai/_shared.py +23 -0
  31. pythinker_code-0.40.0/src/pythinker_code/auth/openai/browser_flow.py +191 -0
  32. pythinker_code-0.40.0/src/pythinker_code/auth/openai/catalog.py +132 -0
  33. pythinker_code-0.40.0/src/pythinker_code/auth/openai/config_apply.py +72 -0
  34. pythinker_code-0.40.0/src/pythinker_code/auth/openai/constants.py +15 -0
  35. pythinker_code-0.40.0/src/pythinker_code/auth/openai/login.py +214 -0
  36. pythinker_code-0.40.0/src/pythinker_code/auth/openai/models.py +244 -0
  37. pythinker_code-0.40.0/src/pythinker_code/auth/openai/oauth_client.py +224 -0
  38. pythinker_code-0.40.0/src/pythinker_code/auth/opencode_go.py +471 -0
  39. pythinker_code-0.40.0/src/pythinker_code/background/agent_runner.py +277 -0
  40. pythinker_code-0.40.0/src/pythinker_code/background/manager.py +1020 -0
  41. pythinker_code-0.40.0/src/pythinker_code/cli/__init__.py +1605 -0
  42. pythinker_code-0.40.0/src/pythinker_code/cli/export.py +361 -0
  43. pythinker_code-0.40.0/src/pythinker_code/cli/mcp.py +395 -0
  44. pythinker_code-0.40.0/src/pythinker_code/cli/vis.py +41 -0
  45. pythinker_code-0.40.0/src/pythinker_code/cli/web.py +83 -0
  46. pythinker_code-0.40.0/src/pythinker_code/config.py +1096 -0
  47. pythinker_code-0.40.0/src/pythinker_code/file_restore.py +108 -0
  48. pythinker_code-0.40.0/src/pythinker_code/hooks/engine.py +460 -0
  49. pythinker_code-0.40.0/src/pythinker_code/memory/consolidation.py +149 -0
  50. pythinker_code-0.40.0/src/pythinker_code/memory/recall.py +398 -0
  51. pythinker_code-0.40.0/src/pythinker_code/metadata.py +124 -0
  52. pythinker_code-0.40.0/src/pythinker_code/plugin/manager.py +145 -0
  53. pythinker_code-0.40.0/src/pythinker_code/project_memory.py +454 -0
  54. pythinker_code-0.40.0/src/pythinker_code/scratchpad.py +1202 -0
  55. pythinker_code-0.40.0/src/pythinker_code/session.py +365 -0
  56. pythinker_code-0.40.0/src/pythinker_code/session_cleanup.py +259 -0
  57. pythinker_code-0.40.0/src/pythinker_code/session_fork.py +404 -0
  58. pythinker_code-0.40.0/src/pythinker_code/share.py +19 -0
  59. pythinker_code-0.40.0/src/pythinker_code/soul/__init__.py +320 -0
  60. pythinker_code-0.40.0/src/pythinker_code/soul/compaction_restore.py +312 -0
  61. pythinker_code-0.40.0/src/pythinker_code/soul/context.py +375 -0
  62. pythinker_code-0.40.0/src/pythinker_code/soul/permission.py +973 -0
  63. pythinker_code-0.40.0/src/pythinker_code/soul/pythinkersoul.py +2316 -0
  64. pythinker_code-0.40.0/src/pythinker_code/soul/slash.py +352 -0
  65. pythinker_code-0.40.0/src/pythinker_code/soul/toolset.py +1081 -0
  66. pythinker_code-0.40.0/src/pythinker_code/subagents/discovery.py +256 -0
  67. pythinker_code-0.40.0/src/pythinker_code/subagents/runner.py +523 -0
  68. pythinker_code-0.40.0/src/pythinker_code/subagents/store.py +214 -0
  69. pythinker_code-0.40.0/src/pythinker_code/telemetry/errors.py +113 -0
  70. pythinker_code-0.40.0/src/pythinker_code/telemetry/sentry.py +257 -0
  71. pythinker_code-0.40.0/src/pythinker_code/tools/agent/__init__.py +795 -0
  72. pythinker_code-0.40.0/src/pythinker_code/tools/background/__init__.py +549 -0
  73. pythinker_code-0.40.0/src/pythinker_code/tools/file/glob.py +171 -0
  74. pythinker_code-0.40.0/src/pythinker_code/tools/file/grep_local.py +1044 -0
  75. pythinker_code-0.40.0/src/pythinker_code/tools/file/read.py +323 -0
  76. pythinker_code-0.40.0/src/pythinker_code/tools/file/replace.py +336 -0
  77. pythinker_code-0.40.0/src/pythinker_code/tools/file/write.py +202 -0
  78. pythinker_code-0.40.0/src/pythinker_code/tools/shell/__init__.py +337 -0
  79. pythinker_code-0.40.0/src/pythinker_code/tools/todo/__init__.py +227 -0
  80. pythinker_code-0.40.0/src/pythinker_code/tools/web/fetch.py +358 -0
  81. pythinker_code-0.40.0/src/pythinker_code/ui/color_utils.py +48 -0
  82. pythinker_code-0.40.0/src/pythinker_code/ui/shell/__init__.py +2316 -0
  83. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/bash_execution.py +259 -0
  84. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/bordered_loader.py +62 -0
  85. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/diff.py +344 -0
  86. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/markdown.py +902 -0
  87. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/render_utils.py +243 -0
  88. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/report.py +475 -0
  89. pythinker_code-0.40.0/src/pythinker_code/ui/shell/components/tool_execution.py +347 -0
  90. pythinker_code-0.40.0/src/pythinker_code/ui/shell/export_import.py +116 -0
  91. pythinker_code-0.40.0/src/pythinker_code/ui/shell/glyphs.py +85 -0
  92. pythinker_code-0.40.0/src/pythinker_code/ui/shell/mcp_status.py +154 -0
  93. pythinker_code-0.40.0/src/pythinker_code/ui/shell/motion.py +354 -0
  94. pythinker_code-0.40.0/src/pythinker_code/ui/shell/prompt.py +3627 -0
  95. pythinker_code-0.40.0/src/pythinker_code/ui/shell/render_constants.py +59 -0
  96. pythinker_code-0.40.0/src/pythinker_code/ui/shell/selectors/settings.py +408 -0
  97. pythinker_code-0.40.0/src/pythinker_code/ui/shell/slash.py +1927 -0
  98. pythinker_code-0.40.0/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +177 -0
  99. pythinker_code-0.40.0/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +330 -0
  100. pythinker_code-0.40.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +483 -0
  101. pythinker_code-0.40.0/src/pythinker_code/ui/shell/usage.py +360 -0
  102. pythinker_code-0.40.0/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +205 -0
  103. pythinker_code-0.40.0/src/pythinker_code/ui/shell/usage_adapters/base.py +82 -0
  104. pythinker_code-0.40.0/src/pythinker_code/ui/shell/usage_adapters/minimax.py +236 -0
  105. pythinker_code-0.40.0/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +265 -0
  106. pythinker_code-0.40.0/src/pythinker_code/ui/shell/visualize/_activity_tree.py +63 -0
  107. pythinker_code-0.40.0/src/pythinker_code/ui/shell/visualize/_blocks.py +1376 -0
  108. pythinker_code-0.40.0/src/pythinker_code/ui/shell/visualize/_btw_panel.py +233 -0
  109. pythinker_code-0.40.0/src/pythinker_code/ui/shell/visualize/_interactive.py +629 -0
  110. pythinker_code-0.40.0/src/pythinker_code/ui/shell/visualize/_live_view.py +1483 -0
  111. pythinker_code-0.40.0/src/pythinker_code/ui/shell/visualize/_worklog.py +280 -0
  112. pythinker_code-0.40.0/src/pythinker_code/ui/terminal_background.py +169 -0
  113. pythinker_code-0.40.0/src/pythinker_code/ui/terminal_capabilities.py +125 -0
  114. pythinker_code-0.40.0/src/pythinker_code/ui/theme.py +673 -0
  115. pythinker_code-0.40.0/src/pythinker_code/utils/aiohttp.py +50 -0
  116. pythinker_code-0.40.0/src/pythinker_code/utils/export.py +852 -0
  117. pythinker_code-0.40.0/src/pythinker_code/utils/io.py +45 -0
  118. pythinker_code-0.40.0/src/pythinker_code/utils/path.py +251 -0
  119. pythinker_code-0.40.0/src/pythinker_code/utils/rich/columns.py +104 -0
  120. pythinker_code-0.40.0/src/pythinker_code/utils/sensitive.py +55 -0
  121. pythinker_code-0.40.0/src/pythinker_code/utils/server.py +131 -0
  122. pythinker_code-0.40.0/src/pythinker_code/utils/trust.py +88 -0
  123. pythinker_code-0.40.0/src/pythinker_code/vis/api/sessions.py +715 -0
  124. pythinker_code-0.40.0/src/pythinker_code/vis/app.py +195 -0
  125. pythinker_code-0.40.0/src/pythinker_code/web/api/config.py +273 -0
  126. pythinker_code-0.40.0/src/pythinker_code/web/api/sessions.py +1284 -0
  127. pythinker_code-0.40.0/src/pythinker_code/web/app.py +447 -0
  128. pythinker_code-0.40.0/src/pythinker_code/web/runner/process.py +791 -0
  129. pythinker_code-0.40.0/src/pythinker_code/web/runner/worker.py +102 -0
  130. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/arc-MQTDjwio.js +1 -0
  131. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-BqN3OxUJ.js +36 -0
  132. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-CMztCjci.js +132 -0
  133. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-Dq1Pc1Mw.js +10 -0
  134. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/channel-qhDswtuY.js +1 -0
  135. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-DbusC1Ve.js +1 -0
  136. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DVbLNrf0.js +1 -0
  137. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CcKr9tY-.js +1 -0
  138. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-DOYrQUON.js +206 -0
  139. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-CykvUqMW.js +231 -0
  140. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-F2yB9bch.js +15 -0
  141. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-aEfupnnT.js +1 -0
  142. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-COCRUGgS.js +1 -0
  143. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-DWUBaPvT.js +1 -0
  144. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-DWUBaPvT.js +1 -0
  145. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-r2sjeDVa.js +2 -0
  146. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-yAYW0P9S.js +1 -0
  147. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/cytoscape.esm-1WKRPAW0.js +321 -0
  148. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-C5em8HPP.js +4 -0
  149. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-Bd3KKZ8u.js +43 -0
  150. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Dt_dHA9y.js +10 -0
  151. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-M0tAqTvo.js +3 -0
  152. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-Divrqptn.js +24 -0
  153. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-DNIbLtWN.js +24 -0
  154. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-cBShhD-s.js +85 -0
  155. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-6vAx1uAh.js +162 -0
  156. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-C3oeY7jF.js +292 -0
  157. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-DTJocgS7.js +106 -0
  158. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/graph-C6_r3a27.js +1 -0
  159. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/index-Dc28Td6n.js +2 -0
  160. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/index-jVtGM95M.js +153 -0
  161. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/index-qgssP-3h.js +5 -0
  162. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA--cEj6EVi.js +2 -0
  163. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-DFH395qA.js +70 -0
  164. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-2uNoB-QQ.js +139 -0
  165. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DshTzSsY.js +89 -0
  166. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/layout-DRCfV3Ae.js +1 -0
  167. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/linear-DPuY3v76.js +1 -0
  168. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DSe1rE_W.js +465 -0
  169. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/mermaid.core-DvJHNXLd.js +244 -0
  170. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-Cka8Qliw.js +96 -0
  171. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CxhP4FwV.js +30 -0
  172. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-LaZXrjYX.js +7 -0
  173. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-CPf-gvBe.js +84 -0
  174. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-B1enq0ei.js +40 -0
  175. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-C_vYuvEz.js +162 -0
  176. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-2HsOiVl4.js +1 -0
  177. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-JvJCuBAS.js +1 -0
  178. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-B3AmWKAr.js +120 -0
  179. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-7l-ARFi_.js +34 -0
  180. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-uEmqCztb.js +161 -0
  181. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-BAxfjJZ9.js +78 -0
  182. pythinker_code-0.40.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-BuQEeVWq.js +7 -0
  183. pythinker_code-0.40.0/src/pythinker_code/web/static/index.html +15 -0
  184. pythinker_code-0.40.0/src/pythinker_code/wire/file.py +165 -0
  185. pythinker_code-0.40.0/src/pythinker_code/wire/server.py +1119 -0
  186. pythinker_code-0.39.0/PKG-INFO +0 -878
  187. pythinker_code-0.39.0/README.md +0 -813
  188. pythinker_code-0.39.0/pyproject.toml +0 -224
  189. pythinker_code-0.39.0/src/pythinker_code/CHANGELOG.md +0 -459
  190. pythinker_code-0.39.0/src/pythinker_code/__main__.py +0 -151
  191. pythinker_code-0.39.0/src/pythinker_code/acp/host.py +0 -301
  192. pythinker_code-0.39.0/src/pythinker_code/agents/default/ask.yaml +0 -62
  193. pythinker_code-0.39.0/src/pythinker_code/agents/default/code_reviewer.yaml +0 -68
  194. pythinker_code-0.39.0/src/pythinker_code/agents/default/coder.yaml +0 -68
  195. pythinker_code-0.39.0/src/pythinker_code/agents/default/debug.yaml +0 -67
  196. pythinker_code-0.39.0/src/pythinker_code/agents/default/debugger.yaml +0 -45
  197. pythinker_code-0.39.0/src/pythinker_code/agents/default/explore.yaml +0 -69
  198. pythinker_code-0.39.0/src/pythinker_code/agents/default/implementer.yaml +0 -53
  199. pythinker_code-0.39.0/src/pythinker_code/agents/default/judge.yaml +0 -57
  200. pythinker_code-0.39.0/src/pythinker_code/agents/default/plan.yaml +0 -71
  201. pythinker_code-0.39.0/src/pythinker_code/agents/default/planner.yaml +0 -44
  202. pythinker_code-0.39.0/src/pythinker_code/agents/default/review.yaml +0 -60
  203. pythinker_code-0.39.0/src/pythinker_code/agents/default/scout.yaml +0 -55
  204. pythinker_code-0.39.0/src/pythinker_code/agents/default/security_reviewer.yaml +0 -59
  205. pythinker_code-0.39.0/src/pythinker_code/agents/default/system.md +0 -347
  206. pythinker_code-0.39.0/src/pythinker_code/agents/default/verifier.yaml +0 -67
  207. pythinker_code-0.39.0/src/pythinker_code/agentspec.py +0 -203
  208. pythinker_code-0.39.0/src/pythinker_code/app.py +0 -934
  209. pythinker_code-0.39.0/src/pythinker_code/approval_runtime/runtime.py +0 -237
  210. pythinker_code-0.39.0/src/pythinker_code/auth/alibaba.py +0 -449
  211. pythinker_code-0.39.0/src/pythinker_code/auth/lm_studio.py +0 -418
  212. pythinker_code-0.39.0/src/pythinker_code/auth/oauth.py +0 -1147
  213. pythinker_code-0.39.0/src/pythinker_code/auth/ollama.py +0 -293
  214. pythinker_code-0.39.0/src/pythinker_code/auth/openai.py +0 -995
  215. pythinker_code-0.39.0/src/pythinker_code/auth/opencode_go.py +0 -465
  216. pythinker_code-0.39.0/src/pythinker_code/background/agent_runner.py +0 -267
  217. pythinker_code-0.39.0/src/pythinker_code/background/manager.py +0 -931
  218. pythinker_code-0.39.0/src/pythinker_code/cli/__init__.py +0 -1578
  219. pythinker_code-0.39.0/src/pythinker_code/cli/export.py +0 -361
  220. pythinker_code-0.39.0/src/pythinker_code/cli/mcp.py +0 -383
  221. pythinker_code-0.39.0/src/pythinker_code/cli/vis.py +0 -38
  222. pythinker_code-0.39.0/src/pythinker_code/cli/web.py +0 -80
  223. pythinker_code-0.39.0/src/pythinker_code/config.py +0 -1089
  224. pythinker_code-0.39.0/src/pythinker_code/file_restore.py +0 -83
  225. pythinker_code-0.39.0/src/pythinker_code/hooks/engine.py +0 -456
  226. pythinker_code-0.39.0/src/pythinker_code/memory/consolidation.py +0 -126
  227. pythinker_code-0.39.0/src/pythinker_code/memory/recall.py +0 -353
  228. pythinker_code-0.39.0/src/pythinker_code/metadata.py +0 -79
  229. pythinker_code-0.39.0/src/pythinker_code/plugin/manager.py +0 -166
  230. pythinker_code-0.39.0/src/pythinker_code/project_memory.py +0 -416
  231. pythinker_code-0.39.0/src/pythinker_code/scratchpad.py +0 -1182
  232. pythinker_code-0.39.0/src/pythinker_code/session.py +0 -319
  233. pythinker_code-0.39.0/src/pythinker_code/session_cleanup.py +0 -260
  234. pythinker_code-0.39.0/src/pythinker_code/session_fork.py +0 -325
  235. pythinker_code-0.39.0/src/pythinker_code/share.py +0 -14
  236. pythinker_code-0.39.0/src/pythinker_code/soul/__init__.py +0 -311
  237. pythinker_code-0.39.0/src/pythinker_code/soul/compaction_restore.py +0 -287
  238. pythinker_code-0.39.0/src/pythinker_code/soul/context.py +0 -339
  239. pythinker_code-0.39.0/src/pythinker_code/soul/permission.py +0 -718
  240. pythinker_code-0.39.0/src/pythinker_code/soul/pythinkersoul.py +0 -2251
  241. pythinker_code-0.39.0/src/pythinker_code/soul/slash.py +0 -352
  242. pythinker_code-0.39.0/src/pythinker_code/soul/toolset.py +0 -1053
  243. pythinker_code-0.39.0/src/pythinker_code/subagents/discovery.py +0 -242
  244. pythinker_code-0.39.0/src/pythinker_code/subagents/runner.py +0 -482
  245. pythinker_code-0.39.0/src/pythinker_code/subagents/store.py +0 -205
  246. pythinker_code-0.39.0/src/pythinker_code/telemetry/errors.py +0 -113
  247. pythinker_code-0.39.0/src/pythinker_code/telemetry/sentry.py +0 -221
  248. pythinker_code-0.39.0/src/pythinker_code/tools/agent/__init__.py +0 -748
  249. pythinker_code-0.39.0/src/pythinker_code/tools/background/__init__.py +0 -559
  250. pythinker_code-0.39.0/src/pythinker_code/tools/file/glob.py +0 -163
  251. pythinker_code-0.39.0/src/pythinker_code/tools/file/grep_local.py +0 -969
  252. pythinker_code-0.39.0/src/pythinker_code/tools/file/read.py +0 -314
  253. pythinker_code-0.39.0/src/pythinker_code/tools/file/replace.py +0 -302
  254. pythinker_code-0.39.0/src/pythinker_code/tools/file/write.py +0 -188
  255. pythinker_code-0.39.0/src/pythinker_code/tools/shell/__init__.py +0 -335
  256. pythinker_code-0.39.0/src/pythinker_code/tools/todo/__init__.py +0 -213
  257. pythinker_code-0.39.0/src/pythinker_code/tools/web/fetch.py +0 -345
  258. pythinker_code-0.39.0/src/pythinker_code/ui/shell/__init__.py +0 -2295
  259. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/bash_execution.py +0 -263
  260. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -67
  261. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/diff.py +0 -320
  262. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/markdown.py +0 -690
  263. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/render_utils.py +0 -225
  264. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/report.py +0 -324
  265. pythinker_code-0.39.0/src/pythinker_code/ui/shell/components/tool_execution.py +0 -310
  266. pythinker_code-0.39.0/src/pythinker_code/ui/shell/export_import.py +0 -122
  267. pythinker_code-0.39.0/src/pythinker_code/ui/shell/glyphs.py +0 -81
  268. pythinker_code-0.39.0/src/pythinker_code/ui/shell/mcp_status.py +0 -154
  269. pythinker_code-0.39.0/src/pythinker_code/ui/shell/motion.py +0 -348
  270. pythinker_code-0.39.0/src/pythinker_code/ui/shell/prompt.py +0 -3576
  271. pythinker_code-0.39.0/src/pythinker_code/ui/shell/render_constants.py +0 -46
  272. pythinker_code-0.39.0/src/pythinker_code/ui/shell/selectors/settings.py +0 -408
  273. pythinker_code-0.39.0/src/pythinker_code/ui/shell/slash.py +0 -1881
  274. pythinker_code-0.39.0/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -165
  275. pythinker_code-0.39.0/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -323
  276. pythinker_code-0.39.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -467
  277. pythinker_code-0.39.0/src/pythinker_code/ui/shell/usage.py +0 -355
  278. pythinker_code-0.39.0/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -180
  279. pythinker_code-0.39.0/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -72
  280. pythinker_code-0.39.0/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -236
  281. pythinker_code-0.39.0/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -260
  282. pythinker_code-0.39.0/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -63
  283. pythinker_code-0.39.0/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -1348
  284. pythinker_code-0.39.0/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -237
  285. pythinker_code-0.39.0/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -618
  286. pythinker_code-0.39.0/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -1438
  287. pythinker_code-0.39.0/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -284
  288. pythinker_code-0.39.0/src/pythinker_code/ui/terminal_capabilities.py +0 -90
  289. pythinker_code-0.39.0/src/pythinker_code/ui/theme.py +0 -623
  290. pythinker_code-0.39.0/src/pythinker_code/utils/aiohttp.py +0 -24
  291. pythinker_code-0.39.0/src/pythinker_code/utils/export.py +0 -808
  292. pythinker_code-0.39.0/src/pythinker_code/utils/io.py +0 -27
  293. pythinker_code-0.39.0/src/pythinker_code/utils/path.py +0 -250
  294. pythinker_code-0.39.0/src/pythinker_code/utils/rich/columns.py +0 -100
  295. pythinker_code-0.39.0/src/pythinker_code/utils/sensitive.py +0 -54
  296. pythinker_code-0.39.0/src/pythinker_code/utils/server.py +0 -121
  297. pythinker_code-0.39.0/src/pythinker_code/utils/trust.py +0 -79
  298. pythinker_code-0.39.0/src/pythinker_code/vis/api/sessions.py +0 -714
  299. pythinker_code-0.39.0/src/pythinker_code/vis/app.py +0 -199
  300. pythinker_code-0.39.0/src/pythinker_code/web/api/config.py +0 -233
  301. pythinker_code-0.39.0/src/pythinker_code/web/api/sessions.py +0 -1256
  302. pythinker_code-0.39.0/src/pythinker_code/web/app.py +0 -449
  303. pythinker_code-0.39.0/src/pythinker_code/web/runner/process.py +0 -754
  304. pythinker_code-0.39.0/src/pythinker_code/web/runner/worker.py +0 -97
  305. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/arc-Cd8Lok_O.js +0 -1
  306. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-jU9QOWo5.js +0 -36
  307. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-LOdQoZym.js +0 -132
  308. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-B2bsBsor.js +0 -10
  309. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/channel-CoH-0sVM.js +0 -1
  310. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-RmBxBb8u.js +0 -1
  311. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CPspY9-G.js +0 -1
  312. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CHONNpu7.js +0 -1
  313. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-Ctqr2Ouc.js +0 -206
  314. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-C__jzgZG.js +0 -231
  315. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D8nDrsG7.js +0 -15
  316. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-Cjq-xPln.js +0 -1
  317. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-DEgXlQbL.js +0 -1
  318. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-VNDpHxfB.js +0 -1
  319. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-VNDpHxfB.js +0 -1
  320. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CdTABU3r.js +0 -2
  321. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-bSM57BHo.js +0 -1
  322. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dp7E9QoZ.js +0 -321
  323. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-C7tqaEYE.js +0 -4
  324. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-CbGEywQW.js +0 -43
  325. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-1JVhUQj9.js +0 -10
  326. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Dt7JQ_Oq.js +0 -3
  327. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-BC1c0cmg.js +0 -24
  328. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-X3yewsE8.js +0 -24
  329. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-CCvy3Xuu.js +0 -85
  330. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DiWLEzB0.js +0 -162
  331. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-B3YKpXtg.js +0 -292
  332. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-Bs2pjLCG.js +0 -106
  333. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/graph-DDLgphpO.js +0 -1
  334. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/index-2E8zHZzj.js +0 -2
  335. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/index-Djxfm_vj.js +0 -5
  336. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/index-ftFAGHLk.js +0 -153
  337. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-Quiwxztx.js +0 -2
  338. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-G4Y743A7.js +0 -70
  339. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-DePHyA08.js +0 -139
  340. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-BCycJn4c.js +0 -89
  341. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/layout-COvqZlMB.js +0 -1
  342. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/linear-BVLFXJB0.js +0 -1
  343. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DnnK_FKi.js +0 -465
  344. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/mermaid.core-TAoOVtXp.js +0 -244
  345. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-Jqyv-NvA.js +0 -96
  346. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CB5-QGKj.js +0 -30
  347. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-CUKjtwJV.js +0 -7
  348. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-87FuYqUA.js +0 -84
  349. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-CKLguUmA.js +0 -40
  350. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-DEy3dywn.js +0 -162
  351. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-CDAq56ZJ.js +0 -1
  352. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CvzBgWL-.js +0 -1
  353. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-DLCIIKH3.js +0 -120
  354. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-D2lQHo-X.js +0 -34
  355. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CfHtfq9m.js +0 -161
  356. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-BS2ffBNA.js +0 -78
  357. pythinker_code-0.39.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DLogY1fh.js +0 -7
  358. pythinker_code-0.39.0/src/pythinker_code/web/static/index.html +0 -15
  359. pythinker_code-0.39.0/src/pythinker_code/wire/file.py +0 -151
  360. pythinker_code-0.39.0/src/pythinker_code/wire/server.py +0 -1083
  361. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/LICENSE +0 -0
  362. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/NOTICE +0 -0
  363. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/__init__.py +0 -0
  364. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  365. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/__init__.py +0 -0
  366. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/convert.py +0 -0
  367. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/mcp.py +0 -0
  368. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/server.py +0 -0
  369. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/session.py +0 -0
  370. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/tools.py +0 -0
  371. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/types.py +0 -0
  372. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/acp/version.py +0 -0
  373. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  374. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  375. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  376. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  377. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/__init__.py +0 -0
  378. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  379. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  380. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/deepseek.py +0 -0
  381. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  382. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/minimax.py +0 -0
  383. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/moonshot.py +0 -0
  384. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/openrouter.py +0 -0
  385. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/platforms.py +0 -0
  386. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/auth/z_ai.py +0 -0
  387. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/background/__init__.py +0 -0
  388. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/background/ids.py +0 -0
  389. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/background/models.py +0 -0
  390. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/background/store.py +0 -0
  391. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/background/summary.py +0 -0
  392. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/background/worker.py +0 -0
  393. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/__main__.py +0 -0
  394. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  395. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/debug.py +0 -0
  396. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/info.py +0 -0
  397. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/plugin.py +0 -0
  398. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/review.py +0 -0
  399. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/secscan.py +0 -0
  400. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/security_scan.py +0 -0
  401. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/skill.py +0 -0
  402. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/toad.py +0 -0
  403. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/cli/update.py +0 -0
  404. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/constant.py +0 -0
  405. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/events.py +0 -0
  406. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/exception.py +0 -0
  407. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/execution_profiles.py +0 -0
  408. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/extensions.py +0 -0
  409. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/feedback.py +0 -0
  410. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/feedback_repo.py +0 -0
  411. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/hooks/__init__.py +0 -0
  412. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/hooks/config.py +0 -0
  413. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/hooks/events.py +0 -0
  414. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/hooks/runner.py +0 -0
  415. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/llm.py +0 -0
  416. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/memory/__init__.py +0 -0
  417. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/memory/harvest.py +0 -0
  418. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/memory/recap.py +0 -0
  419. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/memory/retriever.py +0 -0
  420. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/memory/sanitize.py +0 -0
  421. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/models_dev.py +0 -0
  422. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/native.py +0 -0
  423. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/__init__.py +0 -0
  424. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/llm.py +0 -0
  425. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/manager.py +0 -0
  426. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/models.py +0 -0
  427. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/notifier.py +0 -0
  428. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/store.py +0 -0
  429. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/notifications/wire.py +0 -0
  430. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/plugin/__init__.py +0 -0
  431. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/plugin/tool.py +0 -0
  432. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/prompt_templates.py +0 -0
  433. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/prompts/__init__.py +0 -0
  434. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/prompts/compact.md +0 -0
  435. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/prompts/init.md +0 -0
  436. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/py.typed +0 -0
  437. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/session_recap.py +0 -0
  438. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/session_state.py +0 -0
  439. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skill/__init__.py +0 -0
  440. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  441. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  442. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  443. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skill/lockfile.py +0 -0
  444. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  445. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  446. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  447. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  448. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  449. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  450. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  451. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  452. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  453. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  454. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  455. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  456. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  457. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  458. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  459. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  460. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/agent.py +0 -0
  461. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/approval.py +0 -0
  462. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/btw.py +0 -0
  463. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/compaction.py +0 -0
  464. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/deliberation.py +0 -0
  465. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  466. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  467. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  468. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  469. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
  470. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  471. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/flow_runner.py +0 -0
  472. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/soul/message.py +0 -0
  473. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/__init__.py +0 -0
  474. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/builder.py +0 -0
  475. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/core.py +0 -0
  476. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/git_context.py +0 -0
  477. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/models.py +0 -0
  478. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/output.py +0 -0
  479. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/registry.py +0 -0
  480. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/subagents/usage.py +0 -0
  481. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  482. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/telemetry/config.py +0 -0
  483. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/telemetry/crash.py +0 -0
  484. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  485. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/telemetry/otel.py +0 -0
  486. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/telemetry/sink.py +0 -0
  487. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/thinking.py +0 -0
  488. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  489. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/__init__.py +0 -0
  490. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/agent/description.md +0 -0
  491. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  492. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  493. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  494. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/background/input.md +0 -0
  495. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/background/list.md +0 -0
  496. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/background/output.md +0 -0
  497. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/background/stop.md +0 -0
  498. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/display.py +0 -0
  499. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  500. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  501. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  502. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/glob.md +0 -0
  503. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/grep.md +0 -0
  504. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  505. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/read.md +0 -0
  506. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  507. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  508. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/replace.md +0 -0
  509. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/utils.py +0 -0
  510. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/file/write.md +0 -0
  511. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/mcp_resource/__init__.py +0 -0
  512. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  513. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  514. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  515. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  516. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  517. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/plan/description.md +0 -0
  518. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  519. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  520. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  521. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  522. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  523. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/progress/description.md +0 -0
  524. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/recall/__init__.py +0 -0
  525. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/recall/description.md +0 -0
  526. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  527. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  528. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  529. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  530. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  531. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/skill/description.md +0 -0
  532. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  533. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  534. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/test.py +0 -0
  535. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  536. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/think/think.md +0 -0
  537. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  538. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/utils.py +0 -0
  539. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  540. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  541. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  542. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/web/search.md +0 -0
  543. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/tools/web/search.py +0 -0
  544. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/__init__.py +0 -0
  545. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  546. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  547. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  548. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  549. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  550. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  551. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  552. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  553. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  554. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  555. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  556. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  557. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/console.py +0 -0
  558. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  559. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  560. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  561. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  562. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  563. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  564. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  565. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  566. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  567. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  568. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  569. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  570. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  571. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  572. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  573. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  574. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  575. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  576. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  577. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  578. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  579. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  580. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  581. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  582. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  583. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  584. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  585. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  586. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  587. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  588. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  589. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  590. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  591. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  592. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  593. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  594. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  595. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  596. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  597. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  598. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  599. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/update.py +0 -0
  600. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  601. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  602. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  603. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  604. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  605. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  606. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  607. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  608. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  609. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  610. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  611. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  612. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  613. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  614. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  615. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  616. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/ui/tui_config.py +0 -0
  617. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  618. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/__init__.py +0 -0
  619. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  620. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/artifacts.py +0 -0
  621. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/broadcast.py +0 -0
  622. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/changelog.py +0 -0
  623. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/clipboard.py +0 -0
  624. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/datetime.py +0 -0
  625. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/diff.py +0 -0
  626. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/editor.py +0 -0
  627. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/environment.py +0 -0
  628. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/envvar.py +0 -0
  629. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/file_filter.py +0 -0
  630. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  631. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/gitignore.py +0 -0
  632. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/logging.py +0 -0
  633. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/media_tags.py +0 -0
  634. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/message.py +0 -0
  635. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/proctitle.py +0 -0
  636. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/proxy.py +0 -0
  637. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  638. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  639. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  640. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  641. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  642. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  643. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  644. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/signals.py +0 -0
  645. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  646. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  647. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/string.py +0 -0
  648. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  649. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/term.py +0 -0
  650. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/utils/typing.py +0 -0
  651. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/__init__.py +0 -0
  652. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  653. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  654. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/api/system.py +0 -0
  655. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  656. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  657. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  658. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  659. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  660. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  661. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  662. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  663. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  664. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  665. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/vis/static/index.html +0 -0
  666. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/__init__.py +0 -0
  667. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/api/__init__.py +0 -0
  668. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/api/open_in.py +0 -0
  669. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/auth.py +0 -0
  670. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/models.py +0 -0
  671. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  672. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/runner/messages.py +0 -0
  673. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/_headers +0 -0
  674. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  675. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  676. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  677. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  678. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  679. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  680. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  681. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  682. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  683. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  684. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  685. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  686. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  687. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  688. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  689. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  690. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  691. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  692. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  693. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  694. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  695. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  696. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  697. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  698. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  699. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  700. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  701. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  702. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  703. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  704. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  705. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  706. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  707. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  708. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  709. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  710. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  711. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  712. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  713. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  714. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  715. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  716. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  717. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  718. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  719. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  720. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  721. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  722. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  723. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  724. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  725. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  726. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  727. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  728. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  729. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  730. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  731. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  732. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  733. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  734. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  735. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  736. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  737. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  738. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  739. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  740. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  741. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  742. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  743. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  744. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  745. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  746. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  747. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  748. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  749. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  750. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  751. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  752. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  753. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  754. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  755. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  756. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  757. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  758. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  759. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  760. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  761. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  762. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  763. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  764. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  765. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  766. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  767. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  768. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  769. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  770. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  771. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  772. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  773. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  774. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  775. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  776. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  777. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  778. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  779. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  780. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  781. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  782. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  783. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  784. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  785. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  786. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  787. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  788. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  789. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  790. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  791. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  792. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  793. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  794. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  795. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  796. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  797. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  798. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  799. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  800. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  801. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  802. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  803. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  804. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  805. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  806. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  807. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  808. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  809. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  810. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  811. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  812. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  813. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  814. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  815. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  816. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  817. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  818. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  819. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  820. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  821. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  822. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  823. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  824. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  825. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  826. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  827. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  828. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  829. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  830. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  831. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  832. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  833. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  834. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  835. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  836. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  837. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  838. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  839. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  840. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  841. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  842. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  843. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  844. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  845. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  846. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  847. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  848. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  849. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  850. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  851. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  852. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  853. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  854. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  855. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  856. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  857. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  858. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  859. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  860. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  861. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  862. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  863. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  864. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  865. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  866. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  867. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  868. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  869. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  870. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  871. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  872. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  873. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  874. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  875. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  876. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  877. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  878. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  879. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  880. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  881. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  882. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  883. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  884. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  885. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  886. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  887. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  888. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  889. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  890. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  891. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  892. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  893. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  894. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  895. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  896. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  897. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  898. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  899. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  900. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  901. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  902. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  903. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  904. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  905. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  906. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  907. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  908. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  909. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  910. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  911. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  912. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  913. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  914. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  915. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  916. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  917. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  918. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  919. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  920. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  921. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  922. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  923. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  924. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  925. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  926. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  927. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  928. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  929. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  930. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  931. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  932. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  933. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  934. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  935. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  936. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  937. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  938. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  939. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  940. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  941. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  942. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  943. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  944. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  945. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  946. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  947. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  948. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  949. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  950. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  951. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  952. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  953. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  954. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  955. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  956. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  957. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  958. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  959. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  960. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  961. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  962. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  963. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  964. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  965. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  966. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  967. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  968. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  969. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  970. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  971. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  972. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  973. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  974. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  975. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  976. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  977. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  978. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  979. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  980. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  981. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  982. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  983. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  984. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  985. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  986. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  987. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  988. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  989. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  990. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  991. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  992. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  993. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  994. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  995. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  996. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  997. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  998. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  999. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  1000. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  1001. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  1002. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  1003. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  1004. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  1005. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  1006. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  1007. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  1008. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  1009. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  1010. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  1011. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  1012. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  1013. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  1014. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  1015. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  1016. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  1017. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  1018. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  1019. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  1020. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  1021. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  1022. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  1023. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  1024. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  1025. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  1026. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  1027. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  1028. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  1029. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  1030. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  1031. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  1032. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  1033. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  1034. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  1035. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  1036. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  1037. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  1038. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  1039. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  1040. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  1041. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  1042. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  1043. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  1044. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  1045. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  1046. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  1047. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  1048. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  1049. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  1050. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  1051. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  1052. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  1053. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  1054. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  1055. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  1056. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  1057. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  1058. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  1059. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  1060. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  1061. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/install.sh +0 -0
  1062. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/static/logo.png +0 -0
  1063. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/store/__init__.py +0 -0
  1064. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/web/store/sessions.py +0 -0
  1065. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/wire/__init__.py +0 -0
  1066. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  1067. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/wire/protocol.py +0 -0
  1068. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1069. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/wire/serde.py +0 -0
  1070. {pythinker_code-0.39.0 โ†’ pythinker_code-0.40.0}/src/pythinker_code/wire/types.py +0 -0
@@ -0,0 +1,878 @@
1
+ Metadata-Version: 2.4
2
+ Name: pythinker-code
3
+ Version: 0.40.0
4
+ Summary: Pythinker โ€” an agentic CLI developed by Pythoughts-labs.
5
+ Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
+ Author: Pythoughts-labs
7
+ Author-email: Pythoughts-labs <hello@pythoughts.com>
8
+ License-Expression: Apache-2.0
9
+ License-File: LICENSE
10
+ License-File: NOTICE
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development
20
+ Classifier: Topic :: Software Development :: Code Generators
21
+ Classifier: Topic :: Utilities
22
+ Requires-Dist: agent-client-protocol==0.10.1
23
+ Requires-Dist: aiofiles>=24.0,<26.0
24
+ Requires-Dist: aiohttp==3.14.1
25
+ Requires-Dist: typer==0.26.7
26
+ Requires-Dist: pythinker-core[contrib]==1.2.0
27
+ Requires-Dist: loguru>=0.6.0,<0.7
28
+ Requires-Dist: prompt-toolkit==3.0.52
29
+ Requires-Dist: pillow==12.2.0
30
+ Requires-Dist: pyyaml==6.0.3
31
+ Requires-Dist: rich==15.0.0
32
+ Requires-Dist: certifi>=2025.10.5
33
+ Requires-Dist: pyperclip==1.11.0
34
+ Requires-Dist: click==8.3.0
35
+ Requires-Dist: streamingjson==0.0.5
36
+ Requires-Dist: trafilatura==2.0.0
37
+ Requires-Dist: lxml==6.1.1
38
+ Requires-Dist: tenacity==9.1.4
39
+ Requires-Dist: fastmcp==3.2.0
40
+ Requires-Dist: pydantic==2.13.4
41
+ Requires-Dist: httpx[socks]==0.28.1
42
+ Requires-Dist: pythinker-host==1.0.0
43
+ Requires-Dist: pythinker-review==0.1.0
44
+ Requires-Dist: batrachian-toad==0.5.23 ; python_full_version >= '3.14'
45
+ Requires-Dist: tomlkit==0.15.0
46
+ Requires-Dist: jinja2==3.1.6
47
+ Requires-Dist: pyobjc-framework-cocoa>=12.1 ; sys_platform == 'darwin'
48
+ Requires-Dist: fastapi>=0.115.0
49
+ Requires-Dist: uvicorn[standard]>=0.32.0
50
+ Requires-Dist: scalar-fastapi>=1.8.2
51
+ Requires-Dist: websockets>=14.0
52
+ Requires-Dist: keyring>=25.7.0
53
+ Requires-Dist: setproctitle>=1.3.0
54
+ Requires-Dist: sentry-sdk>=2.20,<3
55
+ Requires-Dist: opentelemetry-api>=1.30,<2
56
+ Requires-Dist: opentelemetry-sdk>=1.30,<2
57
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30,<2
58
+ Requires-Python: >=3.12
59
+ Project-URL: Changelog, https://github.com/Pythoughts-labs/pythinker-code/blob/main/CHANGELOG.md
60
+ Project-URL: Documentation, https://github.com/Pythoughts-labs/pythinker-code#readme
61
+ Project-URL: Homepage, https://github.com/Pythoughts-labs/pythinker-code
62
+ Project-URL: Issues, https://github.com/Pythoughts-labs/pythinker-code/issues
63
+ Project-URL: Repository, https://github.com/Pythoughts-labs/pythinker-code
64
+ Description-Content-Type: text/markdown
65
+
66
+ <div align="center">
67
+
68
+ # <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
69
+
70
+ ### *Think first, then code. Your terminal-native review-first AI engineering agent.*
71
+
72
+ **Code reviewer ยท Security & vulnerability scanner ยท Root-cause debugger โ€” then code creator.**
73
+ **Pythinker reads your repo, audits it, and only writes code after the analysis. All from the shell you already live in.**
74
+
75
+ <br />
76
+
77
+ [![PyPI](https://img.shields.io/pypi/v/pythinker-code?style=for-the-badge&logo=pypi&logoColor=white&color=2563eb&label=pythinker-code&cacheSeconds=60)](https://pypi.org/project/pythinker-code/)
78
+ [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?style=for-the-badge&logo=python&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/pyproject.toml)
79
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
80
+ [![CI](https://img.shields.io/github/actions/workflow/status/Pythoughts-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
81
+
82
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/pythinker-code?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/pythinker-code)
83
+ [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
84
+ [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
85
+ [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
86
+ [![Homepage](https://img.shields.io/badge/home-pythinker.com-ec4899.svg?style=flat-square)](https://pythinker.com)
87
+
88
+ <br />
89
+
90
+ <a href="https://pythinker.com">๐ŸŒ Website</a> &nbsp;ยท&nbsp;
91
+ <a href="#-quick-start">โšก Quick Start</a> &nbsp;ยท&nbsp;
92
+ <a href="#-features">โœจ Features</a> &nbsp;ยท&nbsp;
93
+ <a href="#-ide-integration-via-acp">๐Ÿงฉ IDE Integration</a> &nbsp;ยท&nbsp;
94
+ <a href="#-mcp-tooling">๐Ÿ”Œ MCP</a> &nbsp;ยท&nbsp;
95
+ <a href="#-privacy--telemetry">๐Ÿ” Privacy</a> &nbsp;ยท&nbsp;
96
+ <a href="#-development">๐Ÿ› ๏ธ Develop</a>
97
+
98
+ <br /><br />
99
+
100
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker_cli.gif" alt="Pythinker Code terminal demo" width="860">
101
+
102
+ </div>
103
+
104
+ ---
105
+
106
+ ## ๐Ÿ’ก What is Pythinker?
107
+
108
+ **Pythinker Code** is an open-source, **review-first** AI engineering agent that lives in your terminal. Before it writes a single line, it reads yours โ€” auditing diffs, scanning for vulnerabilities, and root-causing failures. Unlike chat assistants that jump straight to code, Pythinker leads with **code review, security scanning, and root-cause diagnosis**, and only edits files once the analysis points at a fix.
109
+
110
+ It ships with first-class subagents for each role โ€” `code-reviewer` for severity-scored diff critique, `security-reviewer` for validated vulnerability findings, `debugger` for failure root-causing, and `coder`/`implementer` for the scoped edits that follow. All running in a single iterative loop, driven by the model of your choice, with full access to **your repo, the shell, the web, and MCP tools**.
111
+
112
+ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientprotocol/agent-client-protocol), so it slots cleanly into ACP-aware editors like Zed and JetBrains. It loads [**Model Context Protocol (MCP)**](https://modelcontextprotocol.io/) servers, so the same tools your other agents use just work. And it's hackable: subagents, skills, hooks, and plugins are all first-class extension points.
113
+
114
+ > ๐ŸŽฏ **Review ยท Secure ยท Diagnose ยท then Create.** One agent, one shell, one workflow. No tab-switching. No context loss. No magic.
115
+
116
+ ---
117
+
118
+ ## ๐Ÿ†• What's New in 0.40.0
119
+
120
+ - **Alibaba: plan-key routing fixed, live model discovery, and `qwen3.7-plus` default.** Token Plan keys (`sk-sp-`, `sk-tok-`, `sk-ws-`) now route to the correct endpoint โ€” `sk-sp-` was previously sent to the Coding Plan host, causing 401s. Model discovery no longer filters to a hardcoded allowlist; every chat model the endpoint returns now appears, so Token Plan users see the full multi-vendor set (Qwen, DeepSeek, GLM, Kimi, MiniMax). First-login default is `qwen3.7-plus`.
121
+ - **Qwen3.x models always-thinking on both Alibaba plans.** Qwen3.x/3.7 models carry the `always_thinking` capability on Alibaba Model Studio and OpenCode Go plans โ€” no effort dial, no top-border label.
122
+ - **Web: same-origin WebSockets, synced version banner, and token bootstrap fix.** An empty allowed-origin list no longer rejects all WebSocket connections with a 403; the UI banner prefers the version the running backend reports; the initial auth-token race is resolved. `ESC` reliably clears only turn-spawned background tasks.
123
+ - **Security, correctness, and multi-instance hardening.** Permission gate closes awk-pipe and `xargs -L N` shell-out bypasses. Glob enforces workspace boundary via resolved symlinks. Multi-instance sessions use a per-session writer lock; the shared metadata index uses locked read-modify-write; JSONL appenders repair torn final lines. OAuth refresh carries lifetime forward on missing `expires_in`.
124
+ - **Thinking effort: single top-right label, input border stays neutral.** The border no longer recolors per effort level. Effort is shown once as a level-colored dot+label flushed to the right of the input's top border, hidden for always-thinking and non-thinking models.
125
+ - **TUI refinements and agent prompt overhaul.** Adaptive terminal-background probe, unified todo renderer, elapsed/tokens/t-s status line, consistent diff palette. All default agent prompts restructured with Mission / Hard Constraints / Workflow / Output Contract sections.
126
+ - **Breaking: `pythinker web` / `pythinker vis` host flag is now `-H`.** `-h` is now a help alias. Scripts using `-h 0.0.0.0` must switch to `-H <ip>` or `--host <ip>`.
127
+
128
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.40.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
129
+
130
+
131
+ ---
132
+
133
+ ## โœจ Features
134
+
135
+ <table>
136
+ <tr>
137
+ <td width="50%" valign="top">
138
+
139
+ ### ๐Ÿ–ฅ๏ธ Terminal-First
140
+
141
+ Plan, edit, run, and verify without leaving your shell. Every action is visible, scriptable, and auditable.
142
+
143
+ </td>
144
+ <td width="50%" valign="top">
145
+
146
+ ### โšก Shell Command Mode
147
+
148
+ Press `Ctrl-X` to drop into a direct shell prompt inside the agent. Run commands, then snap back into AI mode with full context preserved.
149
+
150
+ </td>
151
+ </tr>
152
+ <tr>
153
+ <td width="50%" valign="top">
154
+
155
+ ### ๐Ÿงฉ ACP IDE Integration
156
+
157
+ Run `pythinker acp` and any [Agent Client Protocol](https://github.com/agentclientprotocol/agent-client-protocol) editor โ€” Zed, JetBrains, and more โ€” gets a full Pythinker session inline.
158
+
159
+ </td>
160
+ <td width="50%" valign="top">
161
+
162
+ ### ๐Ÿ”Œ MCP Tool Loading
163
+
164
+ Manage stdio and HTTP MCP servers with `pythinker mcp`. OAuth-backed servers, persistent config, ad-hoc files โ€” all supported.
165
+
166
+ </td>
167
+ </tr>
168
+ <tr>
169
+ <td width="50%" valign="top">
170
+
171
+ ### ๐Ÿค– Subagents & Skills
172
+
173
+ Delegate focused work to built-in subagents. Load reusable instructions via `/skill:<name>` and bundled prompt flows via `/flow:<name>`. Use `pythinker skill list`, `pythinker skill lock`, and `pythinker skill verify-lock` to inspect project skills and pin their hashes in `skills-lock.json`.
174
+
175
+ </td>
176
+ <td width="50%" valign="top">
177
+
178
+ ### ๐Ÿช Hooks & Plugins
179
+
180
+ Observe or block tool execution with hook events. Install community extensions with `pythinker plugin`.
181
+
182
+ </td>
183
+ </tr>
184
+ <tr>
185
+ <td width="50%" valign="top">
186
+
187
+ ### ๐ŸŒ Web & Visualization UIs
188
+
189
+ Optional web frontend and visualization frontend ship alongside the CLI for richer inspection workflows.
190
+
191
+ </td>
192
+ <td width="50%" valign="top">
193
+
194
+ ### ๐Ÿค– Bring Your Own Model
195
+
196
+ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinker models, or your own keys.
197
+
198
+ </td>
199
+ </tr>
200
+ </table>
201
+
202
+ > [!NOTE]
203
+ > Built-in shell commands such as `cd` are not yet supported in shell command mode.
204
+
205
+ <div align="center">
206
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
207
+ </div>
208
+
209
+ ---
210
+
211
+ ## โšก Quick Start
212
+
213
+ Pythinker ships **native installers for every platform**. Pick the row that
214
+ matches your OS โ€” no Python, Node, or `uv` prerequisite.
215
+
216
+ | Platform | Recommended install | Artifact source |
217
+ |---|---|---|
218
+ | **๐ŸชŸ Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.40.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
219
+ | **<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) |
220
+ | **<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 |
221
+ | **๐Ÿณ Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
222
+ | **๐ŸชŸ Windows โ€” Scoop** | `scoop bucket add pythinker https://github.com/Pythoughts-labs/scoop-pythinker && scoop install pythinker-code` | auto-published Scoop bucket |
223
+ | **โ„๏ธ Nix** | `nix run github:Pythoughts-labs/pythinker-code` | flake `apps.default` |
224
+ | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> โ€” system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
225
+ | **๐Ÿ Python fallback** | `pip install pythinker-code` | PyPI |
226
+
227
+ Every artifact ships with a matching `.sha256` file โ€” verify before install on
228
+ any platform with `sha256sum`, `shasum -a 256`, or `Get-FileHash`.
229
+
230
+ After install, on any OS:
231
+
232
+ ```sh
233
+ pythinker --version # confirm install
234
+ pythinker login # (optional) authenticate a hosted provider
235
+ pythinker # start the interactive TUI
236
+ ```
237
+
238
+ > **In-app updates** โ€” `pythinker update` queries the GitHub Releases API and
239
+ > re-runs the right installer for your build with SHA-256 verification. Set
240
+ > `PYTHINKER_CLI_NO_AUTO_UPDATE=1` to disable the proactive startup check.
241
+
242
+ ---
243
+
244
+ ### ๐ŸชŸ Windows โ€” native installer
245
+
246
+ `PythinkerSetup-0.40.0.exe` is a signed* Inno Setup wizard. Installs per-user
247
+ into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
248
+ PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
249
+ the change. **No UAC prompt.**
250
+
251
+ ```powershell
252
+ # One-line install (downloads the native .exe, verifies SHA-256, runs per-user)
253
+ irm https://pythinker.com/install.ps1 | iex
254
+
255
+ # Or manually download the installer + checksum from the Releases page,
256
+ # verify with Get-FileHash, then run:
257
+ .\PythinkerSetup-0.40.0.exe
258
+
259
+ # Open a fresh PowerShell
260
+ pythinker --version
261
+ ```
262
+
263
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.40.0.exe /ALLUSERS`
264
+ installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
265
+
266
+ **Upgrade:** `pythinker update` from inside the running app โ€” it downloads
267
+ the newest installer, verifies SHA-256, and launches the signed Inno installer
268
+ with visible progress (`/SILENT /NORESTART /CURRENTUSER /CLOSEAPPLICATIONS /NORESTARTAPPLICATIONS`).
269
+
270
+ **Uninstall:** Apps & Features โ†’ *Pythinker Code* โ†’ Uninstall reverts both
271
+ the files and the PATH edit.
272
+
273
+ > ๐Ÿ›ก **First-launch SmartScreen warning** โ€” \*until the Authenticode cert is
274
+ > provisioned in CI, the installer ships unsigned and Windows shows
275
+ > *"Windows protected your PC."* Click **More info โ†’ Run anyway**. Use the
276
+ > published `.sha256` as your integrity check until signing comes online.
277
+
278
+ ---
279
+
280
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> โ€” Homebrew tap
281
+
282
+ ```sh
283
+ # 1. Install
284
+ brew install Pythoughts-labs/pythinker/pythinker-code
285
+
286
+ # 2. Verify
287
+ pythinker --version
288
+ which pythinker # -> /opt/homebrew/bin/pythinker (Apple Silicon)
289
+ # or /usr/local/bin/pythinker (Intel)
290
+ ```
291
+
292
+ Works on **Apple Silicon and Intel** from the same native GitHub Release
293
+ tarballs used by the curl installer. The tap auto-publishes a fresh formula on
294
+ every Pythinker release, so `brew upgrade pythinker-code` always finds the
295
+ latest version.
296
+
297
+ **Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
298
+ auto-update; run this whenever you want the latest).
299
+
300
+ **Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
301
+
302
+ > The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
303
+ > โ€” auto-maintained, do not hand-edit.
304
+
305
+ ---
306
+
307
+ ### <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> โ€” system packages
308
+
309
+ Native `.deb` and `.rpm` packages for both `x86_64` and `aarch64` are
310
+ attached to every GitHub Release.
311
+
312
+ ```sh
313
+ # Debian / Ubuntu (x86_64)
314
+ sudo dpkg -i pythinker-code_0.40.0_amd64.deb
315
+ sudo apt-get install -f # only if dpkg reports missing deps
316
+
317
+ # Debian / Ubuntu (ARM64)
318
+ sudo dpkg -i pythinker-code_0.40.0_arm64.deb
319
+
320
+ # Fedora / RHEL / openSUSE (x86_64)
321
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.x86_64.rpm
322
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.x86_64.rpm.sha256
323
+ sha256sum -c pythinker-code-0.40.0.x86_64.rpm.sha256
324
+ # Fedora / RHEL:
325
+ sudo dnf install ./pythinker-code-0.40.0.x86_64.rpm
326
+ # openSUSE:
327
+ sudo zypper install ./pythinker-code-0.40.0.x86_64.rpm
328
+
329
+ # Fedora / RHEL (aarch64)
330
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.aarch64.rpm
331
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.aarch64.rpm.sha256
332
+ sha256sum -c pythinker-code-0.40.0.aarch64.rpm.sha256
333
+ sudo dnf install ./pythinker-code-0.40.0.aarch64.rpm
334
+ ```
335
+
336
+ Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
337
+ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
338
+
339
+ **Verify before install:**
340
+
341
+ ```sh
342
+ sha256sum -c pythinker-code_0.40.0_amd64.deb.sha256 # Debian/Ubuntu
343
+ sha256sum -c pythinker-code-0.40.0.x86_64.rpm.sha256 # Fedora/RHEL
344
+ ```
345
+
346
+ **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
347
+ `dnf install` over it. Or run `pythinker update` from inside the running
348
+ app โ€” it'll fetch the matching new package and prompt for sudo to install.
349
+
350
+ **Uninstall:**
351
+
352
+ ```sh
353
+ sudo dpkg -r pythinker-code # Debian/Ubuntu
354
+ sudo rpm -e pythinker-code # Fedora/RHEL
355
+ ```
356
+
357
+ ---
358
+
359
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> โ€” curl-bash native installer
360
+
361
+ For containers, fresh VMs, or any host without a system package manager.
362
+ The canonical `https://pythinker.com/install.sh` endpoint is backed by
363
+ [`scripts/install-native.sh`](./scripts/install-native.sh). It serves shell
364
+ script content directly, detects your OS + arch, downloads the matching
365
+ PyInstaller-frozen tarball, verifies its SHA-256, and lands the single binary
366
+ at `~/.local/bin/pythinker`.
367
+
368
+ ```sh
369
+ # Latest release
370
+ curl -fsSL https://pythinker.com/install.sh | bash
371
+
372
+ # Pin a specific version
373
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.27.0
374
+
375
+ # Custom prefix (defaults to $HOME/.local)
376
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
377
+ ```
378
+
379
+ Host `/install.sh` with:
380
+
381
+ ```http
382
+ Content-Type: text/x-shellscript; charset=utf-8
383
+ Cache-Control: public, max-age=300, s-maxage=900, stale-if-error=86400
384
+ ```
385
+
386
+ Use long immutable caching only for versioned release artifact URLs, for
387
+ example `Cache-Control: public, max-age=31536000, immutable` on fixed-tag
388
+ assets.
389
+
390
+ Supported targets:
391
+
392
+ | `uname -s / -m` | Tarball asset |
393
+ |---|---|
394
+ | Linux / x86_64 | `pythinker-<version>-x86_64-unknown-linux-gnu.tar.gz` |
395
+ | Linux / aarch64 | `pythinker-<version>-aarch64-unknown-linux-gnu.tar.gz` |
396
+ | Darwin / arm64 | `pythinker-<version>-aarch64-apple-darwin.tar.gz` |
397
+ | Darwin / x86_64 | `pythinker-<version>-x86_64-apple-darwin.tar.gz` |
398
+
399
+ The script prints PATH guidance if `~/.local/bin` isn't already on your
400
+ `$PATH`.
401
+
402
+ **Uninstall:** `rm ~/.local/bin/pythinker`.
403
+
404
+ ### ๐Ÿ Python fallback
405
+
406
+ Use the Python package only when a native installer is not available for your
407
+ environment:
408
+
409
+ ```sh
410
+ pip install pythinker-code
411
+ ```
412
+
413
+ Native installs remain the supported path for new users and for in-app updates.
414
+
415
+ ### ๐Ÿ” Authenticate (optional)
416
+
417
+ For hosted Pythinker models or ACP terminal auth:
418
+
419
+ ```sh
420
+ pythinker login
421
+ ```
422
+
423
+ ### ๐Ÿ’ฌ Try it out
424
+
425
+ ```sh
426
+ # Interactive session
427
+ pythinker
428
+
429
+ # One-shot prompt
430
+ pythinker --prompt "summarize this repository and suggest the next test to add"
431
+
432
+ # Pick a specific model
433
+ pythinker --model openai/gpt-5.5
434
+
435
+ # Inline config override
436
+ pythinker --config '{"default_thinking": true}'
437
+ ```
438
+
439
+ ---
440
+
441
+ ## ๐Ÿ  Using Local Models (LM Studio & Ollama)
442
+
443
+ Run Pythinker entirely on your own machine โ€” no API key, no cloud. Pythinker speaks each runtime's OpenAI-compatible API, so tools, streaming, JSON mode, vision, and `reasoning_effort` all work the same as with hosted providers.
444
+
445
+ ### LM Studio
446
+
447
+ **1. Set up LM Studio.**
448
+ - Install [LM Studio](https://lmstudio.ai/) and download at least one chat model.
449
+ - In the LM Studio app, open the model and **raise its Context Length** (gear icon โ†’ Context Length). See [Context length matters](#context-length-matters) below.
450
+ - Start the server: **Developer โ†’ Status: Running** (or `lms server start --port 1234`).
451
+
452
+ **2. Connect Pythinker.**
453
+ ```sh
454
+ pythinker login --lm-studio
455
+ ```
456
+
457
+ This auto-discovers every chat-capable model loaded in LM Studio, registers each as `lm-studio/<model-id>`, and picks the largest-context one as your default. Embedding models are filtered out.
458
+
459
+ **3. Use it.**
460
+ ```sh
461
+ # Default LM Studio model
462
+ pythinker -p "explain quicksort"
463
+
464
+ # Specific model
465
+ pythinker -m lm-studio/qwen/qwen3-coder-next -p "write a python http server"
466
+
467
+ # Interactive shell, then switch models with /model
468
+ pythinker
469
+ ```
470
+
471
+ **4. Disconnect.**
472
+ ```sh
473
+ pythinker logout --lm-studio
474
+ ```
475
+
476
+ ### Ollama
477
+
478
+ ```sh
479
+ # 1. start the server in one terminal
480
+ ollama serve
481
+
482
+ # 2. pull a model
483
+ ollama pull llama3.1:8b
484
+
485
+ # 3. connect Pythinker
486
+ pythinker login --ollama
487
+
488
+ # 4. use it
489
+ pythinker -p "explain monad transformers"
490
+ pythinker -m ollama/llama3.1:8b -p "..."
491
+ pythinker logout --ollama
492
+ ```
493
+
494
+ Discovery uses Ollama's `/api/tags` for the model list and `/api/show` per model to read the real context window.
495
+
496
+ ### Remote LM Studio / Ollama (LAN host or alternate port)
497
+
498
+ ```sh
499
+ pythinker login --lm-studio --base-url http://192.168.1.10:1234/v1
500
+ pythinker login --ollama --base-url http://lan-box:11434/v1
501
+ ```
502
+
503
+ The override is saved in your config and used by every subsequent run.
504
+
505
+ ### From inside the interactive shell
506
+
507
+ The same wiring is available as slash commands:
508
+
509
+ ```
510
+ /login lm-studio # or /login lmstudio (no dash also accepted)
511
+ /login ollama
512
+ /logout lm-studio
513
+ /logout ollama
514
+ /login # opens a chooser; entries 9 and 10 are the local providers
515
+ /model lm-studio/google/gemma-4-e4b # switch model mid-session
516
+ ```
517
+
518
+ ### <a id="context-length-matters"></a>โš ๏ธ Context length matters (a common gotcha)
519
+
520
+ Pythinker's agent prompt โ€” system instructions + tool schemas + skills + your message + recent history โ€” is large. **Tens of thousands of tokens before you've even sent your first message.**
521
+
522
+ LM Studio loads a model with a small default context window (often `4096`). If you start chatting against that, you'll see:
523
+
524
+ ```
525
+ LLM provider error: Error: The number of tokens to keep from the initial
526
+ prompt is greater than the context length (n_keep: 16690 >= n_ctx: 4096).
527
+ ```
528
+
529
+ The shell now prints a friendly recovery hint when this happens, but **the cure is in LM Studio**:
530
+
531
+ 1. In LM Studio, open the model in the **Chat** tab and click the **gear/settings** icon (or **My Models โ†’ Edit**).
532
+ 2. Set **Context Length** to at least **`32768`**, and prefer **`131072`** if your VRAM allows. *Practical experience: 64k still triggers errors during longer sessions; 128k is a safer floor.*
533
+ 3. Reload the model (LM Studio prompts you).
534
+ 4. Restart Pythinker so it picks up the new state (`Ctrl+D` then `pythinker`, or `pythinker -r <session-id>` to resume).
535
+
536
+ **Tip:** the bigger you set the context, the more VRAM the model uses. If you OOM, try a smaller quantization (e.g., Q4_K_M instead of Q8_0) or a smaller model variant.
537
+
538
+ Ollama configures context per-request and Pythinker reads the model's max from `/api/show`, so this gotcha is mostly LM-Studio-specific.
539
+
540
+ ### VRAM-friendly model picks
541
+
542
+ Local models vary wildly in memory use. Rough guide on a 16 GB GPU (e.g., RTX 5080 mobile):
543
+
544
+ | Model size | Quant | Approx. VRAM | Fits 16 GB? |
545
+ |------------|-------|--------------|-------------|
546
+ | 2-4 B | Q4-Q8 | 2-4 GB | Yes, easily |
547
+ | 7-8 B | Q4 | 5-6 GB | Yes |
548
+ | 7-8 B | Q8 | 8-9 GB | Yes |
549
+ | 13-14 B | Q4 | 8-10 GB | Yes |
550
+ | 27-31 B | Q4 | 17-20 GB | Tight / no |
551
+ | 27-31 B | Q8 | 30-35 GB | No |
552
+
553
+ If LM Studio errors with `Failed to load model`, you've exceeded VRAM โ€” pick a smaller model or lower-bit quantization.
554
+
555
+ ### Environment variables
556
+
557
+ These override the defaults at both login and runtime:
558
+
559
+ | Variable | Purpose |
560
+ |----------|---------|
561
+ | `LM_STUDIO_BASE_URL` | Override `http://localhost:1234/v1` |
562
+ | `LM_STUDIO_API_KEY` | Set if you've enabled token auth in LM Studio |
563
+ | `OLLAMA_BASE_URL` | Override `http://localhost:11434/v1` |
564
+ | `OLLAMA_API_KEY` | Rarely needed (Ollama is unauthenticated by default) |
565
+
566
+ Example:
567
+ ```sh
568
+ LM_STUDIO_BASE_URL=http://workstation.lan:1234/v1 pythinker -p "..."
569
+ ```
570
+
571
+ ### Refreshing the model list
572
+
573
+ If you load/unload models in LM Studio (or `ollama pull/rm`), re-run login to refresh:
574
+
575
+ ```sh
576
+ pythinker login --lm-studio # or --ollama
577
+ ```
578
+
579
+ (Pythinker intentionally does NOT auto-refresh local providers in the background โ€” login owns that state, so manual edits to your config aren't silently overwritten.)
580
+
581
+ ---
582
+
583
+ ## ๐Ÿงฉ IDE Integration via ACP
584
+
585
+ Pythinker speaks [**Agent Client Protocol**](https://github.com/agentclientprotocol/agent-client-protocol) natively. Point your ACP-compatible editor at `pythinker acp` and you get a multi-session agent server inside your IDE.
586
+
587
+ <details>
588
+ <summary><b>๐Ÿ“ Configuration for Zed / JetBrains</b></summary>
589
+
590
+ ```json
591
+ {
592
+ "agent_servers": {
593
+ "Pythinker Code": {
594
+ "type": "custom",
595
+ "command": "pythinker",
596
+ "args": ["acp"],
597
+ "env": {}
598
+ }
599
+ }
600
+ }
601
+ ```
602
+
603
+ </details>
604
+
605
+ The ACP server provides:
606
+
607
+ | Capability | Description |
608
+ |---|---|
609
+ | ๐Ÿ”‘ **Terminal auth** | `pythinker login` flow exposed to the IDE |
610
+ | ๐Ÿ“‚ **Session listing & resume** | Pick up where you left off |
611
+ | ๐Ÿ”„ **Hot model swap** | Change models for a running ACP session |
612
+
613
+ <div align="center">
614
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
615
+ </div>
616
+
617
+ ---
618
+
619
+ ## ๐Ÿ”Œ MCP Tooling
620
+
621
+ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools from persistent config or ad-hoc files. Same tools, every agent โ€” no rewriting.
622
+
623
+ ### ๐Ÿ› ๏ธ Manage persistent MCP servers
624
+
625
+ ```sh
626
+ # ๐Ÿ“š Context7 stdio server (Codex-style: NAME -- COMMAND)
627
+ pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
628
+ # Added MCP server 'context7' to ~/.pythinker/mcp.json
629
+
630
+ # ๐ŸŒ Streamable HTTP server with API key
631
+ pythinker mcp add --transport http docs https://example.com/mcp \
632
+ --header "API_KEY: your-key"
633
+
634
+ # ๐Ÿ” Streamable HTTP server with OAuth
635
+ pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
636
+
637
+ # ๐Ÿ’ป stdio server with explicit transport
638
+ pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
639
+
640
+ # ๐Ÿ“‹ List, authorize, test, and remove
641
+ pythinker mcp list
642
+ pythinker mcp auth linear
643
+ pythinker mcp test chrome-devtools
644
+ pythinker mcp remove chrome-devtools
645
+ ```
646
+
647
+ ### ๐Ÿ“„ Use an ad-hoc MCP config file
648
+
649
+ ```json
650
+ {
651
+ "mcpServers": {
652
+ "context7": {
653
+ "url": "https://mcp.context7.com/mcp",
654
+ "headers": {
655
+ "CONTEXT7_API_KEY": "YOUR_API_KEY"
656
+ }
657
+ },
658
+ "chrome-devtools": {
659
+ "command": "npx",
660
+ "args": ["-y", "chrome-devtools-mcp@latest"]
661
+ }
662
+ }
663
+ }
664
+ ```
665
+
666
+ ```sh
667
+ pythinker --mcp-config-file /path/to/mcp.json
668
+ ```
669
+
670
+ ---
671
+
672
+ ## ๐Ÿงฌ Extensibility
673
+
674
+ Pythinker is a small, extensible runtime โ€” not a monolith. Build on it.
675
+
676
+ | Extension Point | What it does | Where to look |
677
+ |---|---|---|
678
+ | ๐Ÿค– **Agents & subagents** | YAML specs define tools, prompts, and built-in subagent types | `src/pythinker_code/agents/` |
679
+ | ๐ŸŽ“ **Skills** | `/skill:<name>` loads reusable instructions on demand | bundled & user-defined |
680
+ | ๐ŸŒŠ **Flows** | `/flow:<name>` executes bundled prompt flows | bundled & user-defined |
681
+ | ๐Ÿช **Hooks** | Observe or block tool execution; integrate policy or automation | hook events API |
682
+ | ๐Ÿงฉ **Plugins** | Installable extension packages | `pythinker plugin` |
683
+
684
+ ---
685
+
686
+ ## ๐Ÿ—๏ธ Architecture
687
+
688
+ <div align="center">
689
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
690
+ </div>
691
+
692
+ ---
693
+
694
+ ## ๐Ÿ” Privacy & Telemetry
695
+
696
+ Pythinker is the **agent framework**, not the LLM. You bring your own API key
697
+ (OpenAI, Anthropic, your local LM Studio model, etc.); your prompts and the
698
+ model's responses go directly between your terminal and the model provider you
699
+ configured. Pythinker never sees, stores, or forwards them.
700
+
701
+ If you opt in, Pythinker can collect a small amount of **diagnostic
702
+ telemetry** about how the agent runs to improve the framework itself. It's
703
+ strictly anonymous, never includes your prompts, model output, file contents,
704
+ file paths, or any user-identifying data. Two channels:
705
+
706
+ | Channel | What lands there | Endpoint |
707
+ |---|---|---|
708
+ | **Errors** (Sentry-protocol) | Unhandled exceptions and crash stack traces, with absolute paths above `site-packages/` rewritten to `<env>/` so home directories don't leak | `errors.pythinker.com` (self-hosted Bugsink) |
709
+ | **Traces + structured logs** (OpenTelemetry) | Lifecycle events (`session_started`, `started`, `model_switch`), agent-loop spans (`pythinker.turn` / `pythinker.llm` / `pythinker.tool`), and per-event counters | `otel.pythinker.com` (self-hosted SigNoz) |
710
+
711
+ ### What we collect
712
+
713
+ - **Lifecycle events**: session start, command-line flags actually used (booleans only), startup timing, model name (just the identifier, e.g. `claude-opus-4-7`), thinking-mode toggle, plan-mode toggle.
714
+ - **Agent-loop spans**: turn duration, step count, stop reason (`no_tool_calls` / `max_steps` / `error`), tool name (`Read`, `Bash`, `Edit`, โ€ฆ), tool success/failure, tool duration, LLM call duration, input/output token *counts* (numbers โ€” never the content).
715
+ - **Crashes**: exception class name, scrubbed stack trace, library versions. We do **not** send local variable values.
716
+ - **Static context**: pythinker version, OS family, Python version, terminal type (`TERM_PROGRAM`), CI flag (`CI` env var presence), locale.
717
+ - **A persistent, random `device_id`** so we can count "how many distinct installs" without identifying a person.
718
+
719
+ ### What we never collect
720
+
721
+ - Your prompts, the model's responses, or any conversation content
722
+ - File contents, file paths, working directory names, or workspace structure
723
+ - Your API keys, OAuth tokens, environment variables
724
+ - Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
725
+ - Tool arguments (e.g. what file you read, what command you ran)
726
+
727
+ ### Turning it off
728
+
729
+ Telemetry is on by default. To turn it off:
730
+
731
+ ```sh
732
+ # 1. Per-invocation CLI flag
733
+ pythinker --no-telemetry
734
+
735
+ # 2. Environment variable (works in shells, .env files, CI configs)
736
+ export PYTHINKER_DISABLE_TELEMETRY=1
737
+ pythinker
738
+
739
+ # 3. Permanently in your config file (~/.pythinker/config.toml)
740
+ [default]
741
+ telemetry = false
742
+ ```
743
+
744
+ When telemetry is disabled, Pythinker short-circuits Sentry initialization,
745
+ OTel exporter creation, and the in-process event sink. No network requests are
746
+ made to the telemetry endpoints.
747
+
748
+ ### Pointing telemetry at your own infrastructure
749
+
750
+ If you operate pythinker for a team and want telemetry routed to your own
751
+ SigNoz / Bugsink instead, override the endpoints via environment variables:
752
+
753
+ ```sh
754
+ export PYTHINKER_SENTRY_DSN="https://<key>@your-bugsink.example.com/<project>"
755
+ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
756
+ export PYTHINKER_OTEL_TOKEN="<your bearer token>"
757
+ ```
758
+
759
+ The defaults point at infrastructure operated by the pythinker maintainers and
760
+ are used automatically unless you turn telemetry off.
761
+
762
+ ---
763
+
764
+ ## ๐Ÿ› ๏ธ Development
765
+
766
+ ### ๐Ÿ Prepare the workspace
767
+
768
+ ```sh
769
+ git clone https://github.com/Pythoughts-labs/pythinker-code.git
770
+ cd pythinker-code
771
+ make prepare
772
+ ```
773
+
774
+ ### ๐Ÿงฐ Common commands
775
+
776
+ <table>
777
+ <tr>
778
+ <td valign="top">
779
+
780
+ **โ–ถ๏ธ Run & iterate**
781
+ ```sh
782
+ uv run pythinker # CLI from source
783
+ make format # format all packages
784
+ make check # lint + type-check
785
+ ```
786
+
787
+ </td>
788
+ <td valign="top">
789
+
790
+ **๐Ÿงช Test**
791
+ ```sh
792
+ make test # all unit + e2e tests
793
+ make ai-test # AI-driven tests
794
+ make test-pythinker-code # CLI only
795
+ make test-pythinker-core # Core only
796
+ make test-pythinker-host # Host only
797
+ make test-pythinker-sdk # SDK only
798
+ ```
799
+
800
+ </td>
801
+ </tr>
802
+ <tr>
803
+ <td valign="top">
804
+
805
+ **๐ŸŒ Frontends**
806
+ ```sh
807
+ make web-back # web backend
808
+ make web-front # web frontend
809
+ make vis-back # vis backend
810
+ make vis-front # vis frontend
811
+ ```
812
+
813
+ </td>
814
+ <td valign="top">
815
+
816
+ **๐Ÿ“ฆ Build**
817
+ ```sh
818
+ make build # Python packages
819
+ make build-bin # standalone binary
820
+ make help # all targets
821
+ ```
822
+
823
+ </td>
824
+ </tr>
825
+ </table>
826
+
827
+ > ๐Ÿ’ก `make build` and `make build-bin` build and embed the web and visualization frontends before packaging.
828
+
829
+ ---
830
+
831
+ ## ๐Ÿ—‚๏ธ Project Layout
832
+
833
+ ```
834
+ pythinker-code/
835
+ โ”œโ”€โ”€ ๐Ÿ“ฆ src/pythinker_code/ CLI runtime ยท tools ยท UIs ยท ACP ยท MCP ยท hooks ยท plugins ยท skills ยท web ยท vis backends
836
+ โ”œโ”€โ”€ ๐Ÿงฑ packages/
837
+ โ”‚ โ”œโ”€โ”€ pythinker-core/ Provider-agnostic message, tool, and chat-provider abstractions
838
+ โ”‚ โ”œโ”€โ”€ pythinker-host/ Local/remote host filesystem and command execution
839
+ โ”‚ โ””โ”€โ”€ pythinker-code/ Console-script distribution package
840
+ โ”œโ”€โ”€ ๐Ÿงฐ sdks/pythinker-sdk/ Python SDK
841
+ โ””โ”€โ”€ ๐Ÿงช tests/ ยท tests_e2e/ ยท tests_ai/ Unit ยท wire/CLI e2e ยท AI-driven test suites
842
+ ```
843
+
844
+ ---
845
+
846
+ ## ๐Ÿค Contributing
847
+
848
+ Contributions are warmly welcome โ€” bug reports, PRs, plugins, skills, and docs all help.
849
+
850
+ - ๐Ÿ“– Start with [`CONTRIBUTING.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/CONTRIBUTING.md)
851
+ - ๐Ÿ” See [`SECURITY.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
852
+ - ๐Ÿ“œ Skim [`AGENTS.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
853
+
854
+ If Pythinker helps you, **a โญ on GitHub goes a long way.**
855
+
856
+ ---
857
+
858
+ ## ๐Ÿ“œ License
859
+
860
+ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/NOTICE) for attributions.
861
+
862
+ <br />
863
+
864
+ <div align="center">
865
+
866
+ **Built with โค๏ธ for engineers who live in the terminal.**
867
+
868
+ [๐ŸŒ pythinker.com](https://pythinker.com) &nbsp;ยท&nbsp;
869
+ [๐Ÿ“ฆ PyPI](https://pypi.org/project/pythinker-code/) &nbsp;ยท&nbsp;
870
+ [๐Ÿ™ GitHub](https://github.com/Pythoughts-labs/pythinker-code) &nbsp;ยท&nbsp;
871
+ [๐Ÿงฉ ACP](https://github.com/agentclientprotocol/agent-client-protocol) &nbsp;ยท&nbsp;
872
+ [๐Ÿ”Œ MCP](https://modelcontextprotocol.io/)
873
+
874
+ <p align="center">
875
+ <em>Thanks for visiting โœจ Pythinker! Viewing this README does not trigger telemetry.</em>
876
+ </p>
877
+
878
+ </div>