pythinker-code 2.6.0__tar.gz → 2.7.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 (788) hide show
  1. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/PKG-INFO +39 -14
  2. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/README.md +34 -10
  3. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/pyproject.toml +4 -1
  4. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/CHANGELOG.md +18 -4
  5. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/__main__.py +4 -0
  6. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/agent.yaml +9 -0
  7. pythinker_code-2.7.0/src/pythinker_code/agents/default/code_reviewer.yaml +47 -0
  8. pythinker_code-2.7.0/src/pythinker_code/agents/default/debugger.yaml +35 -0
  9. pythinker_code-2.7.0/src/pythinker_code/agents/default/security_reviewer.yaml +37 -0
  10. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/system.md +14 -2
  11. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/app.py +11 -0
  12. pythinker_code-2.7.0/src/pythinker_code/auth/github_feedback.py +228 -0
  13. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/_lazy_group.py +24 -0
  14. pythinker_code-2.7.0/src/pythinker_code/cli/debug.py +11 -0
  15. pythinker_code-2.7.0/src/pythinker_code/cli/review.py +74 -0
  16. pythinker_code-2.7.0/src/pythinker_code/cli/secscan.py +11 -0
  17. pythinker_code-2.7.0/src/pythinker_code/cli/security_scan.py +35 -0
  18. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/config.py +11 -0
  19. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/agent.py +22 -0
  20. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/permission.py +27 -0
  21. pythinker_code-2.7.0/src/pythinker_code/subagents/discovery.py +234 -0
  22. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/otel.py +16 -0
  23. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/__init__.py +54 -3
  24. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/bash_execution.py +4 -0
  25. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/diff.py +4 -3
  26. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/tool_execution.py +6 -2
  27. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/oauth.py +8 -1
  28. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/prompt.py +28 -0
  29. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/slash.py +109 -3
  30. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +19 -0
  31. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +13 -9
  32. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +45 -5
  33. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +2 -1
  34. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +2 -1
  35. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +2 -1
  36. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +16 -13
  37. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +3 -2
  38. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +9 -6
  39. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +97 -1
  40. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +91 -49
  41. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/LICENSE +0 -0
  42. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/NOTICE +0 -0
  43. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/__init__.py +0 -0
  44. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  45. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/__init__.py +0 -0
  46. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/convert.py +0 -0
  47. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/host.py +0 -0
  48. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/mcp.py +0 -0
  49. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/server.py +0 -0
  50. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/session.py +0 -0
  51. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/tools.py +0 -0
  52. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/types.py +0 -0
  53. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/acp/version.py +0 -0
  54. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  55. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  56. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  57. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  58. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  59. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  60. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  61. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/agentspec.py +0 -0
  62. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  63. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  64. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  65. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/__init__.py +0 -0
  66. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  67. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/deepseek.py +0 -0
  68. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  69. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/minimax.py +0 -0
  70. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/oauth.py +0 -0
  71. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/ollama.py +0 -0
  72. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/openai.py +0 -0
  73. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  74. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/openrouter.py +0 -0
  75. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/auth/platforms.py +0 -0
  76. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/__init__.py +0 -0
  77. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/agent_runner.py +0 -0
  78. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/ids.py +0 -0
  79. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/manager.py +0 -0
  80. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/models.py +0 -0
  81. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/store.py +0 -0
  82. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/summary.py +0 -0
  83. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/background/worker.py +0 -0
  84. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/__init__.py +0 -0
  85. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/__main__.py +0 -0
  86. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/export.py +0 -0
  87. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/info.py +0 -0
  88. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/mcp.py +0 -0
  89. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/plugin.py +0 -0
  90. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/toad.py +0 -0
  91. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/update.py +0 -0
  92. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/vis.py +0 -0
  93. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/cli/web.py +0 -0
  94. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/constant.py +0 -0
  95. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/events.py +0 -0
  96. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/exception.py +0 -0
  97. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/extensions.py +0 -0
  98. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/hooks/__init__.py +0 -0
  99. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/hooks/config.py +0 -0
  100. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/hooks/engine.py +0 -0
  101. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/hooks/events.py +0 -0
  102. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/hooks/runner.py +0 -0
  103. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/llm.py +0 -0
  104. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/metadata.py +0 -0
  105. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/__init__.py +0 -0
  106. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/llm.py +0 -0
  107. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/manager.py +0 -0
  108. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/models.py +0 -0
  109. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/notifier.py +0 -0
  110. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/store.py +0 -0
  111. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/notifications/wire.py +0 -0
  112. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/plugin/__init__.py +0 -0
  113. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/plugin/manager.py +0 -0
  114. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/plugin/tool.py +0 -0
  115. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/prompt_templates.py +0 -0
  116. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/prompts/__init__.py +0 -0
  117. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/prompts/compact.md +0 -0
  118. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/prompts/init.md +0 -0
  119. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/py.typed +0 -0
  120. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/session.py +0 -0
  121. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/session_fork.py +0 -0
  122. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/session_state.py +0 -0
  123. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/share.py +0 -0
  124. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/skill/__init__.py +0 -0
  125. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  126. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  127. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  128. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  129. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  130. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/__init__.py +0 -0
  131. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/approval.py +0 -0
  132. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/btw.py +0 -0
  133. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/compaction.py +0 -0
  134. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/context.py +0 -0
  135. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  136. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  137. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  138. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  139. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  140. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/message.py +0 -0
  141. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
  142. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/slash.py +0 -0
  143. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/soul/toolset.py +0 -0
  144. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/__init__.py +0 -0
  145. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/builder.py +0 -0
  146. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/core.py +0 -0
  147. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/git_context.py +0 -0
  148. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/models.py +0 -0
  149. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/output.py +0 -0
  150. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/registry.py +0 -0
  151. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/runner.py +0 -0
  152. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/subagents/store.py +0 -0
  153. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  154. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/config.py +0 -0
  155. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/crash.py +0 -0
  156. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/errors.py +0 -0
  157. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  158. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  159. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/telemetry/sink.py +0 -0
  160. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  161. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/__init__.py +0 -0
  162. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  163. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/agent/description.md +0 -0
  164. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  165. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  166. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  167. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/background/list.md +0 -0
  168. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/background/output.md +0 -0
  169. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/background/stop.md +0 -0
  170. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/display.py +0 -0
  171. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  172. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  173. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  174. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/glob.md +0 -0
  175. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/glob.py +0 -0
  176. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/grep.md +0 -0
  177. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  178. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  179. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/read.md +0 -0
  180. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/read.py +0 -0
  181. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  182. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  183. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/replace.md +0 -0
  184. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/replace.py +0 -0
  185. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/utils.py +0 -0
  186. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/write.md +0 -0
  187. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/file/write.py +0 -0
  188. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  189. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/plan/description.md +0 -0
  190. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  191. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  192. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  193. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  194. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  195. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  196. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  197. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/test.py +0 -0
  198. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  199. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/think/think.md +0 -0
  200. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  201. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  202. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/utils.py +0 -0
  203. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  204. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  205. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  206. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/web/search.md +0 -0
  207. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/tools/web/search.py +0 -0
  208. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/__init__.py +0 -0
  209. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  210. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  211. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  212. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  213. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  214. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  215. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  216. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  217. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  218. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  219. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  220. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  221. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/console.py +0 -0
  222. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  223. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  224. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  225. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  226. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  227. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  228. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  229. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  230. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  231. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  232. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  233. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  234. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  235. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  236. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  237. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  238. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  239. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  240. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  241. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  242. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  243. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  244. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  245. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  246. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  247. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  248. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  249. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  250. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/update.py +0 -0
  251. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  252. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  253. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  254. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  255. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  256. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  257. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  258. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  259. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  260. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  261. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  262. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  263. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  264. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  265. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  266. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  267. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  268. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  269. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  270. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  271. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/theme.py +0 -0
  272. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/ui/tui_config.py +0 -0
  273. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  274. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/__init__.py +0 -0
  275. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  276. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  277. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/broadcast.py +0 -0
  278. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/changelog.py +0 -0
  279. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/clipboard.py +0 -0
  280. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/datetime.py +0 -0
  281. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/diff.py +0 -0
  282. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/editor.py +0 -0
  283. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/environment.py +0 -0
  284. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/envvar.py +0 -0
  285. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/export.py +0 -0
  286. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/file_filter.py +0 -0
  287. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  288. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/io.py +0 -0
  289. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/logging.py +0 -0
  290. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/media_tags.py +0 -0
  291. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/message.py +0 -0
  292. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/path.py +0 -0
  293. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/proctitle.py +0 -0
  294. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/proxy.py +0 -0
  295. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  296. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  297. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  298. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  299. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  300. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  301. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  302. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  303. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/sensitive.py +0 -0
  304. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/server.py +0 -0
  305. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/signals.py +0 -0
  306. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  307. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/string.py +0 -0
  308. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  309. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/term.py +0 -0
  310. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/utils/typing.py +0 -0
  311. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/__init__.py +0 -0
  312. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  313. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  314. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  315. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/api/system.py +0 -0
  316. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/app.py +0 -0
  317. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  318. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  319. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  320. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  321. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  322. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  323. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  324. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  325. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  326. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  327. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/vis/static/index.html +0 -0
  328. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/__init__.py +0 -0
  329. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/api/__init__.py +0 -0
  330. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/api/config.py +0 -0
  331. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/api/open_in.py +0 -0
  332. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/api/sessions.py +0 -0
  333. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/app.py +0 -0
  334. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/auth.py +0 -0
  335. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/models.py +0 -0
  336. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  337. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/runner/messages.py +0 -0
  338. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/runner/process.py +0 -0
  339. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/runner/worker.py +0 -0
  340. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  341. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  342. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  343. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  344. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  345. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  346. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  347. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  348. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  349. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  350. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  351. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  352. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  353. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  354. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  355. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  356. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  357. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  358. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  359. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  360. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  361. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  362. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  363. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  364. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  365. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  366. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  367. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  368. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  369. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  370. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  371. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  372. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  373. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  374. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  375. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  376. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  377. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  378. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  379. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  380. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  381. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  382. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  383. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  384. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  385. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  386. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  387. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  388. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  389. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  390. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  391. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  392. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  393. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  394. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  395. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  396. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  397. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  398. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  399. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/_baseUniq-xopHfKWX.js +0 -0
  400. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  401. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  402. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  403. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  404. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  405. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  406. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  407. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  408. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  409. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  410. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  411. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/arc-BBJ7V9Gp.js +0 -0
  412. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwGo6qSm.js +0 -0
  413. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  414. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  415. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  416. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  417. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  418. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  419. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  420. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  421. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  422. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  423. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  424. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  425. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  426. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-B96wqtrk.js +0 -0
  427. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  428. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  429. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  430. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BAv4oGOt.js +0 -0
  431. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  432. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  433. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  434. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  435. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  436. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  437. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/channel-BMhsY12h.js +0 -0
  438. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-xvC1-2wn.js +0 -0
  439. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-Ci3UbC9h.js +0 -0
  440. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-YlIqOoyf.js +0 -0
  441. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CiKvkLSV.js +0 -0
  442. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-6L3DZcgX.js +0 -0
  443. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-QN33PNHL--uAxWJyr.js +0 -0
  444. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BgsfDfGl.js +0 -0
  445. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-CmVX5blB.js +0 -0
  446. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  447. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-xLNcUMaH.js +0 -0
  448. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-xLNcUMaH.js +0 -0
  449. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  450. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/clone-D4ji5nla.js +0 -0
  451. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  452. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  453. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DOvUTd9H.js +0 -0
  454. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  455. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  456. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  457. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  458. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  459. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-CnxamR9p.js +0 -0
  460. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  461. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  462. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  463. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  464. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  465. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  466. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  467. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/cytoscape.esm-JliMJb2r.js +0 -0
  468. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  469. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CZPQL3_X.js +0 -0
  470. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  471. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  472. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  473. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  474. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  475. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-BdkuXkbh.js +0 -0
  476. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-B_gzBcDN.js +0 -0
  477. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-C9KMyyaT.js +0 -0
  478. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  479. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  480. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  481. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  482. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  483. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  484. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  485. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  486. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  487. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  488. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BMG5oLO5.js +0 -0
  489. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  490. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  491. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  492. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  493. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  494. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  495. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-ByMcd6Qs.js +0 -0
  496. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  497. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  498. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  499. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  500. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-uIly3nqs.js +0 -0
  501. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  502. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  503. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  504. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  505. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  506. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  507. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  508. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DMlBqiTw.js +0 -0
  509. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  510. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  511. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  512. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  513. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  514. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  515. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  516. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  517. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  518. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  519. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  520. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  521. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  522. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  523. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/graph-B2e5iBNo.js +0 -0
  524. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  525. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  526. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  527. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  528. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  529. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  530. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  531. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  532. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  533. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  534. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  535. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  536. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  537. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  538. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  539. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  540. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  541. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  542. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  543. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  544. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  545. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  546. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  547. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  548. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  549. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/index-ChRG_K1c.js +0 -0
  550. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  551. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  552. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/index-DgWvtkAz.js +0 -0
  553. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/index-XVss4lOI.js +0 -0
  554. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CihjcIPb.js +0 -0
  555. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  556. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  557. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  558. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  559. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  560. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  561. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  562. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  563. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  564. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  565. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  566. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  567. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  568. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-D8UHxaOf.js +0 -0
  569. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  570. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  571. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  572. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  573. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  574. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  575. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  576. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  577. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  578. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  579. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  580. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DMJJ5np4.js +0 -0
  581. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  582. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  583. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  584. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  585. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  586. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  587. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/layout-DCD-kyE5.js +0 -0
  588. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  589. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  590. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  591. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/linear-D32cHhqF.js +0 -0
  592. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  593. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  594. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  595. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  596. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  597. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  598. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  599. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  600. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  601. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  602. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  603. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  604. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  605. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  606. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  607. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  608. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  609. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  610. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BdQ-I_9q.js +0 -0
  611. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  612. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mermaid.core-TDrBZ18i.js +0 -0
  613. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/min-BLYTe2ei.js +0 -0
  614. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  615. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  616. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-D4dVU6Wl.js +0 -0
  617. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  618. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  619. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  620. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  621. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  622. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  623. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  624. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  625. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  626. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  627. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  628. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  629. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  630. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  631. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  632. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  633. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  634. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  635. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  636. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  637. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  638. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  639. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  640. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BPhhXGkK.js +0 -0
  641. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  642. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  643. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  644. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  645. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  646. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  647. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  648. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  649. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  650. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  651. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  652. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  653. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  654. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  655. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  656. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  657. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  658. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  659. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  660. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Bw33P7le.js +0 -0
  661. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  662. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  663. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  664. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  665. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  666. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  667. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  668. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  669. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-BJhppvmZ.js +0 -0
  670. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  671. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  672. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  673. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  674. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  675. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  676. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  677. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  678. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-B2QsrhB7.js +0 -0
  679. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  680. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  681. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  682. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  683. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  684. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  685. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-D-zE9VAU.js +0 -0
  686. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  687. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  688. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  689. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  690. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  691. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  692. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  693. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  694. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  695. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  696. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  697. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  698. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  699. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  700. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  701. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  702. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-fXBn8fR5.js +0 -0
  703. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Uh1qibgy.js +0 -0
  704. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  705. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  706. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  707. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  708. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  709. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  710. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  711. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  712. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  713. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  714. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  715. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  716. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-QJcB1GYA.js +0 -0
  717. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  718. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  719. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BIsZeCJI.js +0 -0
  720. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  721. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  722. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  723. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  724. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  725. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  726. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  727. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  728. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  729. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  730. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  731. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  732. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  733. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  734. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  735. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  736. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  737. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  738. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  739. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  740. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  741. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  742. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  743. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  744. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  745. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  746. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  747. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  748. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  749. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  750. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  751. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-D23m9ArK.js +0 -0
  752. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  753. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  754. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  755. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  756. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  757. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  758. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  759. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  760. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  761. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  762. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  763. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  764. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  765. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  766. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  767. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  768. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  769. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  770. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  771. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  772. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  773. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  774. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  775. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  776. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  777. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/index.html +0 -0
  778. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/static/logo.png +0 -0
  779. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/store/__init__.py +0 -0
  780. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/web/store/sessions.py +0 -0
  781. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/__init__.py +0 -0
  782. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/file.py +0 -0
  783. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  784. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/protocol.py +0 -0
  785. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/root_hub.py +0 -0
  786. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/serde.py +0 -0
  787. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/server.py +0 -0
  788. {pythinker_code-2.6.0 → pythinker_code-2.7.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 2.6.0
3
+ Version: 2.7.0
4
4
  Summary: Pythinker Code is your next CLI agent.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Mohamed Elkholy
@@ -38,6 +38,7 @@ Requires-Dist: fastmcp==2.12.5
38
38
  Requires-Dist: pydantic==2.13.4
39
39
  Requires-Dist: httpx[socks]==0.28.1
40
40
  Requires-Dist: pythinker-host==1.0.0
41
+ Requires-Dist: pythinker-review==0.1.0
41
42
  Requires-Dist: batrachian-toad==0.5.23 ; python_full_version >= '3.14'
42
43
  Requires-Dist: tomlkit==0.14.0
43
44
  Requires-Dist: jinja2==3.1.6
@@ -53,21 +54,21 @@ Requires-Dist: opentelemetry-api>=1.30,<2
53
54
  Requires-Dist: opentelemetry-sdk>=1.30,<2
54
55
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30,<2
55
56
  Requires-Python: >=3.12
56
- Project-URL: Changelog, https://github.com/mohamed-elkholy95/Pythinker-Code/blob/main/CHANGELOG.md
57
- Project-URL: Documentation, https://github.com/mohamed-elkholy95/Pythinker-Code#readme
58
57
  Project-URL: Homepage, https://github.com/mohamed-elkholy95/Pythinker-Code
59
- Project-URL: Issues, https://github.com/mohamed-elkholy95/Pythinker-Code/issues
60
58
  Project-URL: Repository, https://github.com/mohamed-elkholy95/Pythinker-Code
59
+ Project-URL: Issues, https://github.com/mohamed-elkholy95/Pythinker-Code/issues
60
+ Project-URL: Changelog, https://github.com/mohamed-elkholy95/Pythinker-Code/blob/main/CHANGELOG.md
61
+ Project-URL: Documentation, https://github.com/mohamed-elkholy95/Pythinker-Code#readme
61
62
  Description-Content-Type: text/markdown
62
63
 
63
64
  <div align="center">
64
65
 
65
66
  # <img src="https://raw.githubusercontent.com/mohamed-elkholy95/Pythinker-Code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
66
67
 
67
- ### *Your terminal-native AI engineering agent.*
68
+ ### *Think first, then code. Your terminal-native review-first AI engineering agent.*
68
69
 
69
- **Read code. Edit files. Run commands. Search the web. Plug into your IDE.**
70
- **All from the shell you already live in.**
70
+ **Code reviewer · Security & vulnerability scanner · Root-cause debugger then code creator.**
71
+ **Pythinker reads your repo, audits it, and only writes code after the analysis. All from the shell you already live in.**
71
72
 
72
73
  <br />
73
74
 
@@ -76,7 +77,7 @@ Description-Content-Type: text/markdown
76
77
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/mohamed-elkholy95/Pythinker-Code/blob/main/LICENSE)
77
78
  [![CI](https://img.shields.io/github/actions/workflow/status/mohamed-elkholy95/Pythinker-Code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/mohamed-elkholy95/Pythinker-Code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
78
79
 
79
- [![Downloads](https://img.shields.io/badge/downloads-5k-2563eb?style=flat-square&logo=pypi&logoColor=white)](https://pypistats.org/packages/pythinker-code)
80
+ [![Downloads](https://img.shields.io/pepy/dt/pythinker-code?cacheSeconds=300)](https://pepy.tech/projects/pythinker-code)
80
81
  [![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/)
81
82
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
82
83
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -102,23 +103,47 @@ Description-Content-Type: text/markdown
102
103
 
103
104
  ## 💡 What is Pythinker?
104
105
 
105
- **Pythinker Code** is an open-source AI coding agent that lives in your terminal. Unlike chat-based assistants stuck behind a browser tab, Pythinker can **read your repo, edit files, run shell commands, browse the web, and call MCP tools** all in a single iterative loop driven by the model of your choice.
106
+ **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.
107
+
108
+ 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**.
106
109
 
107
110
  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.
108
111
 
109
- > 🎯 **One agent, one shell, one workflow.** No tab-switching. No context loss. No magic.
112
+ > 🎯 **Review · Secure · Diagnose · then Create.** One agent, one shell, one workflow. No tab-switching. No context loss. No magic.
110
113
 
111
114
  ---
112
115
 
116
+ ## 🆕 What's New in 2.7.0
117
+
118
+ First-class agent-first code review, security review, and root-cause debugging, via the new
119
+ `pythinker-review` workspace package.
120
+
121
+ - **`pythinker review diff`** — runs a code-review pass on the current branch's diff against `origin/main` (or `--base <ref>`, `--staged`, `--working-tree`, `--range A..B`). Outputs pretty / JSON / SARIF. `--fail-on <severity>` makes it a CI gate.
122
+ - **`pythinker review diff --with-security`** — runs the code-review and security-review passes in parallel.
123
+ - **`pythinker secscan diff`** — security-only pass with Pythinker Security Scan deterministic prompt anchors for secrets, command/SQL/NoSQL injection, deserialization, SSRF, path traversal, XSS, redirects, JWT/CORS issues, prompt-injection surfaces, debug endpoints, weak crypto, and more.
124
+ - **`pythinker security-scan scan`** — repo-wide Pythinker Security Scan pipeline for deterministic candidate discovery, model-backed investigation, revalidation, triage, reports, and exports.
125
+ - **`pythinker debug failure <log-file>`** — root-cause debugger pass over failing test output, stack traces, logs, and correlated diff context, with secret redaction before prompts.
126
+ - **`pythinker review diff --mode deslopify`** — read-only Reviewflow-style simplification review for accidental complexity, duplicate wrappers, dead branches, and brittle test/type band-aids.
127
+ - **Evidence validation** — findings outside the reviewed chunk, unsafe paths, stale line ranges, or non-matching evidence snippets are rejected and surfaced as validation failures instead of being silently persisted.
128
+ - **Findings store** at `.pythinker-review/runs/<id>/` for inspection via `pythinker review list`, `pythinker review show <id>`, `pythinker review next`, and `pythinker review show-finding <finding-id>`.
129
+ - **Code-reviewr PR assistant parity** — read-only `pythinker review describe`, `improve`/`suggest`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, and `config` commands produce structured PR artifacts/helpers without posting or modifying files.
130
+ - **Reviewflow workflows** — compatible project/feature/run/finding/patch state models power `pythinker review init`, `map`, `review`, `report`, `next`, `show --finding`, `triage`, `revalidate`, `fix`, `open-pr`, `ci`, and `doctor`.
131
+ - **Three new subagent roles** — `code-reviewer`, `security-reviewer`, and `debugger` — usable from any interactive Pythinker session, producing the standard SUMMARY/EVIDENCE/CHANGES/RISKS/BLOCKERS block.
132
+ - **Fail-closed by default** — any chunk timeout, malformed model output, or worker exception exits non-zero. `--allow-partial` is the explicit escape hatch and surfaces failures in output.
133
+
134
+ No new third-party runtime dependencies. Reuses the active Pythinker model when invoked via `pythinker review` / `pythinker secscan` / `pythinker security-scan` / `pythinker debug`; the standalone `pythinker-review` / `pythinker-secscan` / `pythinker-security-scan` / `pythinker-debug` console scripts accept explicit/env configuration.
135
+
136
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.7.0`.
137
+
113
138
  ## 🆕 What's New in 2.6.0
114
139
 
115
140
  > **Hotfix release for Kimi K2.x and DeepSeek users on PyPI.**
116
141
 
117
- The runtime fix for Moonshot's `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection was in the `pythinker-core` source since 2.4.0, but the published `pythinker-core==1.0.0` on PyPI predates it — so installs of `pythinker-code` 2.4.0 / 2.5.0 from PyPI kept hitting the bug on Kimi K2.5, K2.6, and DeepSeek (including through OpenCode Go). Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
142
+ The runtime fix for the strict-interleaved `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection was in the `pythinker-core` source since 2.4.0, but the published `pythinker-core==1.0.0` on PyPI predates it — so installs of `pythinker-code` 2.4.0 / 2.5.0 from PyPI kept hitting the bug on Kimi K2.5, K2.6, and DeepSeek (including through OpenCode Go). Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
118
143
 
119
144
  2.6.0 bumps the pinned dep:
120
145
 
121
- - **`pythinker-core` 1.0.0 → 1.1.0** (published independently to PyPI) — strict-interleaved providers (`kimi-k2*`, `deepseek*`) now always emit `reasoning_content` on assistant turns, with the fallback chain `ThinkPart → extract_text() → "[reasoning unavailable]"`. Multi-step tool flows on Moonshot/Kimi/DeepSeek no longer trip the strict thinking-replay check.
146
+ - **`pythinker-core` 1.0.0 → 1.1.0** (published independently to PyPI) — strict-interleaved providers (`kimi-k2*`, `deepseek*`) now always emit `reasoning_content` on assistant turns, with the fallback chain `ThinkPart → extract_text() → "[reasoning unavailable]"`. Multi-step tool flows on Kimi/DeepSeek no longer trip the strict thinking-replay check.
122
147
  - **Root pin** `pythinker-core[contrib]==1.0.0 → 1.1.0` — new installs of `pip install --upgrade pythinker-code==2.6.0` (and `uv tool install`/`upgrade`) pick up the fix automatically.
123
148
 
124
149
  No app-level changes vs 2.5.0; everything from the 2.5.0 release is still present. **Existing 2.5.0 users on Kimi K2.x / DeepSeek must upgrade to 2.6.0.**
@@ -148,11 +173,11 @@ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.5.0`
148
173
 
149
174
  ## 🆕 What's New in 2.4.0
150
175
 
151
- Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
176
+ Subagent roles overhaul, Kimi K2 provider support, and a ripgrep-free Grep fallback.
152
177
 
153
178
  - **New subagents** — `implementer` (scoped edits + verification), `review` (severity-scored read-only review), and `verifier` (`PASS` / `FAIL` / `FLAKY` validation runner). Join the existing `coder` / `explore` / `plan` roster.
154
179
  - **Structured subagent output** — every default agent now answers with `### SUMMARY / EVIDENCE / CHANGES / RISKS / BLOCKERS`, so the parent agent can consume results without re-parsing prose. New recommended flow: **Scout → Plan → Implement → Review → Verify** (review and verify can run in parallel).
155
- - **Kimi K2.5 / K2.6 (Moonshot) support** — `--thinking` is routed via the provider-specific `thinking.type` body field, and assistant tool-call replays always carry `reasoning_content` so multi-step tool flows stop tripping Moonshot's strict thinking-replay check. Same hardening applied to DeepSeek's strict mode.
180
+ - **Kimi K2.5 / K2.6 support** — `--thinking` is routed via the provider-specific `thinking.type` body field, and assistant tool-call replays always carry `reasoning_content` so multi-step tool flows stop tripping the strict thinking-replay check. Same hardening applied to DeepSeek's strict mode.
156
181
  - **`Grep` works without `rg`** — pure-Python fallback honors `pattern` / `glob` / `type` / `ignore_case` / `multiline` / `context` / `output_mode` / `offset` / `head_limit` and respects `.gitignore`. The downloader also retries against the upstream GitHub releases mirror and accepts `PYTHINKER_RG_PATH=/absolute/path` plus extra discovery paths (`~/.cargo/bin`, `~/.local/bin`, `~/.pi/agent/bin`, `/usr/bin`, `/usr/local/bin`).
157
182
  - **`AGENTS.md` rewritten** to match the new roster, and `tools/agent/description.md` documents the parallel-review and cross-check patterns.
158
183
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  # <img src="https://raw.githubusercontent.com/mohamed-elkholy95/Pythinker-Code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
4
4
 
5
- ### *Your terminal-native AI engineering agent.*
5
+ ### *Think first, then code. Your terminal-native review-first AI engineering agent.*
6
6
 
7
- **Read code. Edit files. Run commands. Search the web. Plug into your IDE.**
8
- **All from the shell you already live in.**
7
+ **Code reviewer · Security & vulnerability scanner · Root-cause debugger then code creator.**
8
+ **Pythinker reads your repo, audits it, and only writes code after the analysis. All from the shell you already live in.**
9
9
 
10
10
  <br />
11
11
 
@@ -14,7 +14,7 @@
14
14
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/mohamed-elkholy95/Pythinker-Code/blob/main/LICENSE)
15
15
  [![CI](https://img.shields.io/github/actions/workflow/status/mohamed-elkholy95/Pythinker-Code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/mohamed-elkholy95/Pythinker-Code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
16
16
 
17
- [![Downloads](https://img.shields.io/badge/downloads-5k-2563eb?style=flat-square&logo=pypi&logoColor=white)](https://pypistats.org/packages/pythinker-code)
17
+ [![Downloads](https://img.shields.io/pepy/dt/pythinker-code?cacheSeconds=300)](https://pepy.tech/projects/pythinker-code)
18
18
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
19
19
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
20
20
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -40,23 +40,47 @@
40
40
 
41
41
  ## 💡 What is Pythinker?
42
42
 
43
- **Pythinker Code** is an open-source AI coding agent that lives in your terminal. Unlike chat-based assistants stuck behind a browser tab, Pythinker can **read your repo, edit files, run shell commands, browse the web, and call MCP tools** all in a single iterative loop driven by the model of your choice.
43
+ **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.
44
+
45
+ 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**.
44
46
 
45
47
  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.
46
48
 
47
- > 🎯 **One agent, one shell, one workflow.** No tab-switching. No context loss. No magic.
49
+ > 🎯 **Review · Secure · Diagnose · then Create.** One agent, one shell, one workflow. No tab-switching. No context loss. No magic.
48
50
 
49
51
  ---
50
52
 
53
+ ## 🆕 What's New in 2.7.0
54
+
55
+ First-class agent-first code review, security review, and root-cause debugging, via the new
56
+ `pythinker-review` workspace package.
57
+
58
+ - **`pythinker review diff`** — runs a code-review pass on the current branch's diff against `origin/main` (or `--base <ref>`, `--staged`, `--working-tree`, `--range A..B`). Outputs pretty / JSON / SARIF. `--fail-on <severity>` makes it a CI gate.
59
+ - **`pythinker review diff --with-security`** — runs the code-review and security-review passes in parallel.
60
+ - **`pythinker secscan diff`** — security-only pass with Pythinker Security Scan deterministic prompt anchors for secrets, command/SQL/NoSQL injection, deserialization, SSRF, path traversal, XSS, redirects, JWT/CORS issues, prompt-injection surfaces, debug endpoints, weak crypto, and more.
61
+ - **`pythinker security-scan scan`** — repo-wide Pythinker Security Scan pipeline for deterministic candidate discovery, model-backed investigation, revalidation, triage, reports, and exports.
62
+ - **`pythinker debug failure <log-file>`** — root-cause debugger pass over failing test output, stack traces, logs, and correlated diff context, with secret redaction before prompts.
63
+ - **`pythinker review diff --mode deslopify`** — read-only Reviewflow-style simplification review for accidental complexity, duplicate wrappers, dead branches, and brittle test/type band-aids.
64
+ - **Evidence validation** — findings outside the reviewed chunk, unsafe paths, stale line ranges, or non-matching evidence snippets are rejected and surfaced as validation failures instead of being silently persisted.
65
+ - **Findings store** at `.pythinker-review/runs/<id>/` for inspection via `pythinker review list`, `pythinker review show <id>`, `pythinker review next`, and `pythinker review show-finding <finding-id>`.
66
+ - **Code-reviewr PR assistant parity** — read-only `pythinker review describe`, `improve`/`suggest`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, and `config` commands produce structured PR artifacts/helpers without posting or modifying files.
67
+ - **Reviewflow workflows** — compatible project/feature/run/finding/patch state models power `pythinker review init`, `map`, `review`, `report`, `next`, `show --finding`, `triage`, `revalidate`, `fix`, `open-pr`, `ci`, and `doctor`.
68
+ - **Three new subagent roles** — `code-reviewer`, `security-reviewer`, and `debugger` — usable from any interactive Pythinker session, producing the standard SUMMARY/EVIDENCE/CHANGES/RISKS/BLOCKERS block.
69
+ - **Fail-closed by default** — any chunk timeout, malformed model output, or worker exception exits non-zero. `--allow-partial` is the explicit escape hatch and surfaces failures in output.
70
+
71
+ No new third-party runtime dependencies. Reuses the active Pythinker model when invoked via `pythinker review` / `pythinker secscan` / `pythinker security-scan` / `pythinker debug`; the standalone `pythinker-review` / `pythinker-secscan` / `pythinker-security-scan` / `pythinker-debug` console scripts accept explicit/env configuration.
72
+
73
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.7.0`.
74
+
51
75
  ## 🆕 What's New in 2.6.0
52
76
 
53
77
  > **Hotfix release for Kimi K2.x and DeepSeek users on PyPI.**
54
78
 
55
- The runtime fix for Moonshot's `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection was in the `pythinker-core` source since 2.4.0, but the published `pythinker-core==1.0.0` on PyPI predates it — so installs of `pythinker-code` 2.4.0 / 2.5.0 from PyPI kept hitting the bug on Kimi K2.5, K2.6, and DeepSeek (including through OpenCode Go). Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
79
+ The runtime fix for the strict-interleaved `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection was in the `pythinker-core` source since 2.4.0, but the published `pythinker-core==1.0.0` on PyPI predates it — so installs of `pythinker-code` 2.4.0 / 2.5.0 from PyPI kept hitting the bug on Kimi K2.5, K2.6, and DeepSeek (including through OpenCode Go). Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
56
80
 
57
81
  2.6.0 bumps the pinned dep:
58
82
 
59
- - **`pythinker-core` 1.0.0 → 1.1.0** (published independently to PyPI) — strict-interleaved providers (`kimi-k2*`, `deepseek*`) now always emit `reasoning_content` on assistant turns, with the fallback chain `ThinkPart → extract_text() → "[reasoning unavailable]"`. Multi-step tool flows on Moonshot/Kimi/DeepSeek no longer trip the strict thinking-replay check.
83
+ - **`pythinker-core` 1.0.0 → 1.1.0** (published independently to PyPI) — strict-interleaved providers (`kimi-k2*`, `deepseek*`) now always emit `reasoning_content` on assistant turns, with the fallback chain `ThinkPart → extract_text() → "[reasoning unavailable]"`. Multi-step tool flows on Kimi/DeepSeek no longer trip the strict thinking-replay check.
60
84
  - **Root pin** `pythinker-core[contrib]==1.0.0 → 1.1.0` — new installs of `pip install --upgrade pythinker-code==2.6.0` (and `uv tool install`/`upgrade`) pick up the fix automatically.
61
85
 
62
86
  No app-level changes vs 2.5.0; everything from the 2.5.0 release is still present. **Existing 2.5.0 users on Kimi K2.x / DeepSeek must upgrade to 2.6.0.**
@@ -86,11 +110,11 @@ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.5.0`
86
110
 
87
111
  ## 🆕 What's New in 2.4.0
88
112
 
89
- Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
113
+ Subagent roles overhaul, Kimi K2 provider support, and a ripgrep-free Grep fallback.
90
114
 
91
115
  - **New subagents** — `implementer` (scoped edits + verification), `review` (severity-scored read-only review), and `verifier` (`PASS` / `FAIL` / `FLAKY` validation runner). Join the existing `coder` / `explore` / `plan` roster.
92
116
  - **Structured subagent output** — every default agent now answers with `### SUMMARY / EVIDENCE / CHANGES / RISKS / BLOCKERS`, so the parent agent can consume results without re-parsing prose. New recommended flow: **Scout → Plan → Implement → Review → Verify** (review and verify can run in parallel).
93
- - **Kimi K2.5 / K2.6 (Moonshot) support** — `--thinking` is routed via the provider-specific `thinking.type` body field, and assistant tool-call replays always carry `reasoning_content` so multi-step tool flows stop tripping Moonshot's strict thinking-replay check. Same hardening applied to DeepSeek's strict mode.
117
+ - **Kimi K2.5 / K2.6 support** — `--thinking` is routed via the provider-specific `thinking.type` body field, and assistant tool-call replays always carry `reasoning_content` so multi-step tool flows stop tripping the strict thinking-replay check. Same hardening applied to DeepSeek's strict mode.
94
118
  - **`Grep` works without `rg`** — pure-Python fallback honors `pattern` / `glob` / `type` / `ignore_case` / `multiline` / `context` / `output_mode` / `offset` / `head_limit` and respects `.gitignore`. The downloader also retries against the upstream GitHub releases mirror and accepts `PYTHINKER_RG_PATH=/absolute/path` plus extra discovery paths (`~/.cargo/bin`, `~/.local/bin`, `~/.pi/agent/bin`, `/usr/bin`, `/usr/local/bin`).
95
119
  - **`AGENTS.md` rewritten** to match the new roster, and `tools/agent/description.md` documents the parallel-review and cross-check patterns.
96
120
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "2.6.0"
3
+ version = "2.7.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -43,6 +43,7 @@ dependencies = [
43
43
  "pydantic==2.13.4",
44
44
  "httpx[socks]==0.28.1",
45
45
  "pythinker-host==1.0.0",
46
+ "pythinker-review==0.1.0",
46
47
  "batrachian-toad==0.5.23; python_version >= \"3.14\"",
47
48
  "tomlkit==0.14.0",
48
49
  "jinja2==3.1.6",
@@ -84,12 +85,14 @@ source-exclude = ["examples/**/*", "tests/**/*", "src/pythinker_code/deps/**/*"]
84
85
  members = [
85
86
  "packages/pythinker-core",
86
87
  "packages/pythinker-host",
88
+ "packages/pythinker-review",
87
89
  "sdks/pythinker-sdk",
88
90
  ]
89
91
 
90
92
  [tool.uv.sources]
91
93
  pythinker-core = { workspace = true }
92
94
  pythinker-host = { workspace = true }
95
+ pythinker-review = { workspace = true }
93
96
  pythinker-code = { workspace = true }
94
97
 
95
98
  [project.scripts]
@@ -2,13 +2,27 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 2.7.0 (2026-05-21)
6
+
7
+ First-class review-first workflows: code review, security scanning, root-cause debugging, PR artifact helpers, and Reviewflow stateful review/fix workflows.
8
+
9
+ - Added the `pythinker-review` workspace package and wired it into the root `pythinker-code` package via the pinned `pythinker-review==0.1.0` dependency.
10
+ - Added `pythinker review`, `pythinker secscan`, `pythinker security-scan`, and `pythinker debug` command surfaces, backed by standalone `pythinker-review`, `pythinker-secscan`, `pythinker-security-scan`, and `pythinker-debug` console scripts.
11
+ - Added read-only PR artifact/helper commands: `describe`, `improve`/`suggest`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, and `config`.
12
+ - Added Reviewflow workflow commands and state models for `init`, `map`, `review`, `report`, `next`, `show --finding`, `triage`, `revalidate`, `fix`, `open-pr`, `ci`, and `doctor`.
13
+ - Added the `code-reviewer`, `security-reviewer`, and `debugger` subagent roles for interactive Pythinker sessions.
14
+ - Hardened review output validation so unsafe paths, stale line ranges, mismatched evidence snippets, malformed model JSON, worker failures, and timeouts fail closed unless `--allow-partial` is explicitly used.
15
+ - Refreshed README release notes with the 2.7.0 review/security/debug feature set and the pinned `pythinker-code==2.7.0` upgrade snippet required by the release gate.
16
+
17
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.7.0`.
18
+
5
19
  ## 2.6.0 (2026-05-13)
6
20
 
7
21
  Packaging fix: pin `pythinker-core[contrib]==1.1.0` so the Kimi K2.x / DeepSeek strict-interleaved reasoning-replay fix reaches PyPI installs.
8
22
 
9
23
  ### Why 2.6.0 lands the same day as 2.5.0
10
24
 
11
- The runtime fix for Moonshot's `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection landed in the `pythinker-core` source tree on 2026-05-11 (released in `pythinker-code` 2.4.0 source), but **the published `pythinker-core==1.0.0` on PyPI predates that change** (uploaded 2026-05-07). `pythinker-code` 2.4.0 and 2.5.0 both pinned `pythinker-core[contrib]==1.0.0`, so PyPI users on Kimi K2.5 / K2.6 / DeepSeek through OpenCode Go (and elsewhere) kept hitting the bug even on the latest CLI. Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
25
+ The runtime fix for the strict-interleaved `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection landed in the `pythinker-core` source tree on 2026-05-11 (released in `pythinker-code` 2.4.0 source), but **the published `pythinker-core==1.0.0` on PyPI predates that change** (uploaded 2026-05-07). `pythinker-code` 2.4.0 and 2.5.0 both pinned `pythinker-core[contrib]==1.0.0`, so PyPI users on Kimi K2.5 / K2.6 / DeepSeek through OpenCode Go (and elsewhere) kept hitting the bug even on the latest CLI. Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
12
26
 
13
27
  ### The fix
14
28
 
@@ -84,7 +98,7 @@ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.5.0`
84
98
 
85
99
  ## 2.4.0 (2026-05-11)
86
100
 
87
- Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
101
+ Subagent roles overhaul, Kimi K2 provider support, and a ripgrep-free Grep fallback.
88
102
 
89
103
  - New built-in subagents under `src/pythinker_code/agents/default/`:
90
104
  - `implementer.yaml` — scoped code changes with minimum surrounding edits and a quick verification pass.
@@ -93,8 +107,8 @@ Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free G
93
107
  - `coder.yaml`, `explore.yaml`, and `plan.yaml` now emit a standard `### SUMMARY / EVIDENCE / CHANGES / RISKS / BLOCKERS` response contract so the parent agent can consume subagent output without re-parsing prose.
94
108
  - `agent.yaml` registers the three new roles; `tools/agent/description.md` documents the Scout → Plan → Implement → Review → Verify workflow and the parallel review/verification pattern.
95
109
  - `agents/default/system.md`: adds decomposition guidance (preview → todo list → parallel chunks), enforces post-tool-call verification before acting on results, and tells the agent to cross-check at least one load-bearing subagent finding before editing from it.
96
- - Kimi K2.5 / K2.6 (Moonshot) and other strict interleaved-thinking providers:
97
- - `packages/pythinker-core/.../chat_provider/pythinker.py`: always emit `reasoning_content` on assistant tool-call replays so Moonshot's "thinking is enabled but reasoning_content is missing in assistant tool call message at index N" error no longer trips multi-step tool flows.
110
+ - Kimi K2.5 / K2.6 and other strict interleaved-thinking providers:
111
+ - `packages/pythinker-core/.../chat_provider/pythinker.py`: always emit `reasoning_content` on assistant tool-call replays so the strict "thinking is enabled but reasoning_content is missing in assistant tool call message at index N" error no longer trips multi-step tool flows.
98
112
  - `packages/pythinker-core/.../contrib/chat_provider/openai_legacy.py`: replay reasoning metadata on every assistant turn for `kimi-k2*` / `deepseek*` models (falls back to the assistant text or `"[reasoning unavailable]"` when reasoning content was not retained).
99
113
  - `src/pythinker_code/llm.py`: route Kimi K2 thinking through the provider-specific `extra_body={"thinking": {"type": "enabled"|"disabled"}}` body field instead of OpenAI's `reasoning_effort` (which Kimi ignores), and persist `LLM.thinking` across `clone_llm_with_model_alias` so model switches preserve the user's thinking choice.
100
114
  - `tools/file/grep_local.py`:
@@ -46,6 +46,10 @@ Commands:
46
46
  export Export session data.
47
47
  mcp Manage MCP server configurations.
48
48
  plugin Manage plugins.
49
+ review Diff-focused code review (delegates to pythinker-review).
50
+ secscan Diff-focused security review (delegates to pythinker-review).
51
+ security-scan Repo-wide Pythinker Security Scan pipeline (Python-native).
52
+ debug Failure/log root-cause analysis (delegates to pythinker-review).
49
53
  update Check for and install Pythinker CLI updates.
50
54
  vis Run Pythinker Agent Tracing Visualizer.
51
55
  web Run Pythinker CLI web interface.
@@ -29,6 +29,12 @@ agent:
29
29
  coder:
30
30
  path: ./coder.yaml
31
31
  description: "Good at general software engineering tasks."
32
+ code-reviewer:
33
+ path: ./code_reviewer.yaml
34
+ description: "Diff-focused code review with severity-scored findings."
35
+ debugger:
36
+ path: ./debugger.yaml
37
+ description: "Failure/log/stack-trace root-cause analysis with reproduction evidence."
32
38
  explore:
33
39
  path: ./explore.yaml
34
40
  description: "Fast codebase exploration with prompt-enforced read-only behavior."
@@ -38,6 +44,9 @@ agent:
38
44
  review:
39
45
  path: ./review.yaml
40
46
  description: "Read-only code review with severity-scored findings."
47
+ security-reviewer:
48
+ path: ./security_reviewer.yaml
49
+ description: "Diff-focused security review with validated findings."
41
50
  implementer:
42
51
  path: ./implementer.yaml
43
52
  description: "Scoped implementation with minimal edits and verification."
@@ -0,0 +1,47 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ system_prompt_args:
5
+ ROLE_ADDITIONAL: |
6
+ You are running as the Pythinker code-reviewer subagent. The parent agent is your caller and can only see your final response.
7
+
8
+ Role and scope:
9
+ - Perform read-only, evidence-first review of the current repository diff.
10
+ - Use `pythinker review diff` by default; add `--with-security` when the parent requests security coverage.
11
+ - Use `pythinker review describe`, `suggest`/`improve`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, or `config` only when the parent explicitly asks for that artifact/helper.
12
+ - For code-reviewr parity requests, prefer local read-only options such as `--labels-file`, `--extra-instructions`, `--best-practices-file`, `--min-score`, `--docs-style`, `--symbol`, `--pr-url`, and `--issues-dir` instead of provider publishing.
13
+ - Do not edit files, commit, stage, push, approve, merge, or publish provider comments.
14
+
15
+ Tool policy:
16
+ - Prefer `pythinker review diff --format json --no-save` so results are structured and do not write run state.
17
+ - If persistence is requested, omit `--no-save` and report where run state was written.
18
+ - If the requested base ref fails, report the exact blocker instead of guessing another branch unless the parent gave fallback instructions.
19
+ - Read files only to verify a load-bearing finding or command failure.
20
+
21
+ Review discipline:
22
+ - Flag only issues introduced or made reachable by the diff.
23
+ - Prefer no finding over vague speculation.
24
+ - Treat malformed model output, validation errors, empty diffs, and missing base refs as blockers, not successful reviews.
25
+ - Surface false-positive risks and coverage limits clearly.
26
+
27
+ Final response contract:
28
+ ### SUMMARY
29
+ One paragraph: command run, number of findings/artifacts, top severity or most important result.
30
+ ### EVIDENCE
31
+ Bullet list of `<file>:<line> [severity] <rule_id> — <title>` for findings, or concise artifact bullets for non-finding commands. Top 10 max.
32
+ ### CHANGES
33
+ None.
34
+ ### RISKS
35
+ False-positive risks, partial context, skipped files, or `None observed.`.
36
+ ### BLOCKERS
37
+ Anything that prevented a clean run (exit code 2/3/4, base ref missing, malformed output, validation errors), or `None.`.
38
+ when_to_use: |
39
+ Use to run a read-only diff-focused code review or code-reviewr-derived PR artifact workflow on the current branch.
40
+ allowed_tools:
41
+ - "pythinker_code.tools.shell:Shell"
42
+ - "pythinker_code.tools.file:ReadFile"
43
+ - "pythinker_code.tools.file:Grep"
44
+ exclude_tools:
45
+ - "pythinker_code.tools.file:WriteFile"
46
+ - "pythinker_code.tools.file:StrReplaceFile"
47
+ subagents:
@@ -0,0 +1,35 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ system_prompt_args:
5
+ ROLE_ADDITIONAL: |
6
+ You are now running as a subagent. All `user` messages are sent by the main agent. The main agent cannot see your context, only your last message. Treat the parent agent as your caller. Do not ask the end user questions; surface ambiguity in your final summary.
7
+
8
+ You are a root-cause debugger. Your job is to run `pythinker debug failure <log-file>` when a failure log is available, or request the parent provide the log path/command evidence.
9
+
10
+ Operating rules:
11
+ - Read-only by convention. Do not edit source files.
12
+ - Focus on reproduction evidence, changed-file correlation, likely root cause, and minimal next action.
13
+ - Default to `--format json` and translate the result into the structured response block below.
14
+
15
+ Final response contract:
16
+ ### SUMMARY
17
+ One paragraph: likely root cause, confidence, and first recommended action.
18
+ ### EVIDENCE
19
+ Bullet list of log/stack/diff evidence with file:line when available.
20
+ ### CHANGES
21
+ None.
22
+ ### RISKS
23
+ Ambiguities, missing reproduction context, or `None observed.`.
24
+ ### BLOCKERS
25
+ Missing log path, command, environment, or `None.`.
26
+ when_to_use: |
27
+ Use for failing tests, stack traces, runtime errors, flaky failures, or debugging requests where root cause should be found before editing code.
28
+ allowed_tools:
29
+ - "pythinker_code.tools.shell:Shell"
30
+ - "pythinker_code.tools.file:ReadFile"
31
+ - "pythinker_code.tools.file:Grep"
32
+ exclude_tools:
33
+ - "pythinker_code.tools.file:WriteFile"
34
+ - "pythinker_code.tools.file:StrReplaceFile"
35
+ subagents:
@@ -0,0 +1,37 @@
1
+ version: 1
2
+ agent:
3
+ extend: ./agent.yaml
4
+ system_prompt_args:
5
+ ROLE_ADDITIONAL: |
6
+ You are now running as a subagent. All `user` messages are sent by the main agent. The main agent cannot see your context, only your last message. Treat the parent agent as your caller. Do not ask the end user questions; surface ambiguity in your final summary.
7
+
8
+ You are a security reviewer. For diff-focused review, run `pythinker secscan diff` and reformat the result for the parent. For repo-wide vulnerability discovery, run the Python-native `pythinker security-scan` pipeline.
9
+
10
+ Operating rules:
11
+ - Read-only by convention. You may run secscan/security-scan CLI commands and read outputs, but do not edit source files.
12
+ - Diff mode default: `pythinker secscan diff --format json --no-save`.
13
+ - Repo-wide mode default: `pythinker security-scan scan --json`, then only run `pythinker security-scan process` when the parent explicitly asks for model-backed investigation.
14
+ - Use `--fail-on critical` for triage runs unless the parent specifies otherwise.
15
+ - Translate JSON output into the structured response block below.
16
+
17
+ Final response contract:
18
+ ### SUMMARY
19
+ One paragraph: number and severity of security findings, what the parent should fix first.
20
+ ### EVIDENCE
21
+ Bullet list of `<file>:<line> [severity] <rule_id> — <title>`, top 10.
22
+ ### CHANGES
23
+ None.
24
+ ### RISKS
25
+ False-positive risks, missing context, or coverage gaps; or `None observed.`.
26
+ ### BLOCKERS
27
+ Anything that prevented a clean run (exit 3/4, base ref missing), or `None.`.
28
+ when_to_use: |
29
+ Use to run a diff-only security review on the current branch. Can run in parallel with `code-reviewer`.
30
+ allowed_tools:
31
+ - "pythinker_code.tools.shell:Shell"
32
+ - "pythinker_code.tools.file:ReadFile"
33
+ - "pythinker_code.tools.file:Grep"
34
+ exclude_tools:
35
+ - "pythinker_code.tools.file:WriteFile"
36
+ - "pythinker_code.tools.file:StrReplaceFile"
37
+ subagents:
@@ -1,9 +1,21 @@
1
- You are Pythinker CLI, an interactive general AI agent running on a user's computer.
1
+ You are Pythinker a think-first software engineering agent running on the user's computer. Before you write code, you read code.
2
2
 
3
- Your primary goal is to help users with software engineering tasks by taking action — use the tools available to you to make real changes on the user's system. You should also answer questions when asked. Always adhere strictly to the following system instructions and the user's requirements.
3
+ Your identity, in order of priority:
4
+
5
+ 1. **Code reviewer.** Diff-aware critique with severity-scored findings, anchored to specific files and lines.
6
+ 2. **Security & vulnerability scanner.** Surface injection, secret leakage, unsafe deserialization, SSRF, path traversal, weak crypto, supply-chain risks, and OWASP-class issues. Validate before reporting.
7
+ 3. **Root-cause diagnostician.** Reproduce, isolate, and explain failures from logs, stack traces, and diffs — fix only after the cause is named.
8
+ 4. **Code creator.** Implement changes only after review/diagnosis, or when the user explicitly asks you to build, edit, or refactor from the start.
9
+
10
+ You still have the full coding toolset and use it decisively when asked. The think-first posture is about *order*, not capability: review → diagnose → secure → then create.
4
11
 
5
12
  ${ROLE_ADDITIONAL}
6
13
 
14
+ Product posture (strong): for any ambiguous engineering request, default to evidence-first review, security diagnosis, or root-cause analysis before editing code. Inspect evidence and produce findings/recommendations first. Patch only after an explicit remediation request — or when the user's initial intent was clearly to build or change code. Never silently choose "make the edit" when "show me what's wrong" is a plausible reading of the request; if both readings are plausible, ask one short clarifying question.
15
+
16
+ When you do produce findings, prefer the existing reviewer/scanner subagents over ad-hoc analysis: `code-reviewer` for diff critique, `security-reviewer` for vulnerability validation, `debugger` for failure root-causing, `review`/`explore`/`plan` for read-only passes. Promote these flows to the user when they fit — many users do not yet know Pythinker leads with review.
17
+
18
+
7
19
  # Prompt and Tool Use
8
20
 
9
21
  The user's messages may contain questions and/or task descriptions in natural language, code snippets, logs, file paths, or other forms of information. Read them, understand them and do what the user requested. For simple questions/greetings that do not involve any information in the working directory or on the internet, you may simply reply directly. For anything else, default to taking action with tools. When the request could be interpreted as either a question to answer or a task to complete, treat it as a task.
@@ -776,6 +776,17 @@ class PythinkerCLI:
776
776
  level=WelcomeInfoItem.Level.WARN,
777
777
  )
778
778
  )
779
+ welcome_info.append(
780
+ WelcomeInfoItem(
781
+ name="Tip",
782
+ value=(
783
+ 'Pythinker reviews before it writes. Try "review this diff",'
784
+ ' "scan for vulnerabilities", or "find the root cause"'
785
+ " — code edits come after the analysis."
786
+ ),
787
+ level=WelcomeInfoItem.Level.INFO,
788
+ )
789
+ )
779
790
  welcome_info.append(
780
791
  WelcomeInfoItem(
781
792
  name="Tip",