painapple-code 1.1.1__tar.gz → 1.1.2__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 (515) hide show
  1. {painapple_code-1.1.1 → painapple_code-1.1.2}/CHANGELOG.md +10 -0
  2. {painapple_code-1.1.1/src/painapple_code.egg-info → painapple_code-1.1.2}/PKG-INFO +1 -1
  3. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/terminal.md +4 -0
  4. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/_version.py +3 -3
  5. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/data/models.defaults.yaml +2 -2
  6. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/data/models.yaml +2 -2
  7. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/paths.py +1 -1
  8. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tools/agents/shadow-git-helper.md +1 -1
  9. painapple_code-1.1.2/src/painapple_code/tools/term-bin/pbcopy +40 -0
  10. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/pty_posix.py +14 -0
  11. {painapple_code-1.1.1 → painapple_code-1.1.2/src/painapple_code.egg-info}/PKG-INFO +1 -1
  12. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code.egg-info/SOURCES.txt +1 -0
  13. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code.egg-info/scm_file_list.json +2 -0
  14. painapple_code-1.1.2/src/painapple_code.egg-info/scm_version.json +8 -0
  15. painapple_code-1.1.1/src/painapple_code.egg-info/scm_version.json +0 -8
  16. {painapple_code-1.1.1 → painapple_code-1.1.2}/.devcontainer/devcontainer.json +0 -0
  17. {painapple_code-1.1.1 → painapple_code-1.1.2}/.dockerignore +0 -0
  18. {painapple_code-1.1.1 → painapple_code-1.1.2}/.gitignore +0 -0
  19. {painapple_code-1.1.1 → painapple_code-1.1.2}/CONTRIBUTING.md +0 -0
  20. {painapple_code-1.1.1 → painapple_code-1.1.2}/Dockerfile +0 -0
  21. {painapple_code-1.1.1 → painapple_code-1.1.2}/LICENSE +0 -0
  22. {painapple_code-1.1.1 → painapple_code-1.1.2}/MANIFEST.in +0 -0
  23. {painapple_code-1.1.1 → painapple_code-1.1.2}/README.dockerhub.md +0 -0
  24. {painapple_code-1.1.1 → painapple_code-1.1.2}/README.md +0 -0
  25. {painapple_code-1.1.1 → painapple_code-1.1.2}/SECURITY.md +0 -0
  26. {painapple_code-1.1.1 → painapple_code-1.1.2}/THIRD_PARTY_NOTICES.md +0 -0
  27. {painapple_code-1.1.1 → painapple_code-1.1.2}/build-frontend.sh +0 -0
  28. {painapple_code-1.1.1 → painapple_code-1.1.2}/docker-compose.yml +0 -0
  29. {painapple_code-1.1.1 → painapple_code-1.1.2}/docker-entrypoint.sh +0 -0
  30. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/annotate-editor.png +0 -0
  31. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/browser-widget.png +0 -0
  32. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/comments-stash.gif +0 -0
  33. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/cost-analytics.png +0 -0
  34. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/favicon.png +0 -0
  35. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/input-autocomplete.gif +0 -0
  36. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/logo.png +0 -0
  37. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/markdown-quick-edit.gif +0 -0
  38. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/overview.png +0 -0
  39. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/prompt-history.png +0 -0
  40. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/quick-switcher.gif +0 -0
  41. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/quick-switcher.png +0 -0
  42. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/settings-appearance.png +0 -0
  43. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/settings-claude.png +0 -0
  44. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/shadow-journal.png +0 -0
  45. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/snippets-picker.png +0 -0
  46. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/terminal.gif +0 -0
  47. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/turn-summary-bar-expanded.png +0 -0
  48. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/turn-summary-bar.png +0 -0
  49. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/welcome-screen.png +0 -0
  50. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/assets/zen-mode.png +0 -0
  51. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/changelog.md +0 -0
  52. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/features.md +0 -0
  53. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/getting-started/first-run.md +0 -0
  54. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/getting-started/install-devcontainer.md +0 -0
  55. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/getting-started/install-docker.md +0 -0
  56. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/getting-started/install-pip.md +0 -0
  57. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/getting-started/requirements.md +0 -0
  58. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/getting-started/security.md +0 -0
  59. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/analytics-and-history.md +0 -0
  60. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/claude-artifacts.md +0 -0
  61. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/customization.md +0 -0
  62. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/files.md +0 -0
  63. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/git-and-diffs.md +0 -0
  64. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/images-and-annotation.md +0 -0
  65. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/input-and-commands.md +0 -0
  66. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/ipad-and-mobile.md +0 -0
  67. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/permissions-and-thinking.md +0 -0
  68. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/providers.md +0 -0
  69. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/sessions.md +0 -0
  70. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/shadow-git.md +0 -0
  71. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/stash-and-discussions.md +0 -0
  72. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/welcome-screen.md +0 -0
  73. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/guides/zen-mode.md +0 -0
  74. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/index.md +0 -0
  75. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/api.md +0 -0
  76. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/commands.md +0 -0
  77. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/data-storage.md +0 -0
  78. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/keyboard-shortcuts.md +0 -0
  79. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/optional-helpers.md +0 -0
  80. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/profiles.md +0 -0
  81. {painapple_code-1.1.1 → painapple_code-1.1.2}/docs-site/reference/server-cli.md +0 -0
  82. {painapple_code-1.1.1 → painapple_code-1.1.2}/mkdocs.yml +0 -0
  83. {painapple_code-1.1.1 → painapple_code-1.1.2}/painapple-docker.sh +0 -0
  84. {painapple_code-1.1.1 → painapple_code-1.1.2}/pyproject.toml +0 -0
  85. {painapple_code-1.1.1 → painapple_code-1.1.2}/requirements-docs.txt +0 -0
  86. {painapple_code-1.1.1 → painapple_code-1.1.2}/requirements.txt +0 -0
  87. {painapple_code-1.1.1 → painapple_code-1.1.2}/setup.cfg +0 -0
  88. {painapple_code-1.1.1 → painapple_code-1.1.2}/setup.py +0 -0
  89. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/__init__.py +0 -0
  90. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/__main__.py +0 -0
  91. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/auth_middleware.py +0 -0
  92. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/__init__.py +0 -0
  93. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/__init__.py +0 -0
  94. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/claude_seed.py +0 -0
  95. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/config.py +0 -0
  96. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/container.py +0 -0
  97. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/launch.py +0 -0
  98. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/runtime.py +0 -0
  99. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/lifecycle_cmd.py +0 -0
  100. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/list_cmd.py +0 -0
  101. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/manage_cmd.py +0 -0
  102. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/netinfo.py +0 -0
  103. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/profiles.py +0 -0
  104. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/serve_args.py +0 -0
  105. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/serve_config.py +0 -0
  106. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/setup_cmd.py +0 -0
  107. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cli/ui.py +0 -0
  108. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/cost_analytics.py +0 -0
  109. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/data/presets.defaults.json +0 -0
  110. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/data/strings.yaml +0 -0
  111. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/helpers.py +0 -0
  112. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/prompt_explorer.py +0 -0
  113. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/__init__.py +0 -0
  114. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/base.py +0 -0
  115. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude/__init__.py +0 -0
  116. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude/capabilities.py +0 -0
  117. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude/errors.py +0 -0
  118. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude/launch.py +0 -0
  119. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude/summary.py +0 -0
  120. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude/translate.py +0 -0
  121. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude_sdk/__init__.py +0 -0
  122. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/claude_sdk/driver.py +0 -0
  123. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex/__init__.py +0 -0
  124. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex/capabilities.py +0 -0
  125. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex/errors.py +0 -0
  126. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex/translate.py +0 -0
  127. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/__init__.py +0 -0
  128. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/capabilities.py +0 -0
  129. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/launch.py +0 -0
  130. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/summary.py +0 -0
  131. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/translate.py +0 -0
  132. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/transport.py +0 -0
  133. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/__init__.py +0 -0
  134. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_agents.py +0 -0
  135. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_app.py +0 -0
  136. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_app_commit_sections.py +0 -0
  137. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_app_config.py +0 -0
  138. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_app_session_prefs.py +0 -0
  139. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_browser.py +0 -0
  140. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_commands.py +0 -0
  141. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_costs.py +0 -0
  142. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_drafts.py +0 -0
  143. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_exec.py +0 -0
  144. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_files.py +0 -0
  145. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_git.py +0 -0
  146. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_logs.py +0 -0
  147. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_plugins.py +0 -0
  148. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_project_config.py +0 -0
  149. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_prompts.py +0 -0
  150. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_providers.py +0 -0
  151. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_search.py +0 -0
  152. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_session_stash.py +0 -0
  153. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_session_welcome.py +0 -0
  154. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_sessions.py +0 -0
  155. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow.py +0 -0
  156. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow_db.py +0 -0
  157. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow_files.py +0 -0
  158. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow_search.py +0 -0
  159. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_skills.py +0 -0
  160. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_tasks.py +0 -0
  161. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_terminal.py +0 -0
  162. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_upload.py +0 -0
  163. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/api_viewer.py +0 -0
  164. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/dependencies.py +0 -0
  165. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/routes/ws_chat.py +0 -0
  166. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/server.py +0 -0
  167. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/server_logging.py +0 -0
  168. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/services/__init__.py +0 -0
  169. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/services/agent_session.py +0 -0
  170. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/session_store.py +0 -0
  171. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/session_store_core.py +0 -0
  172. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_db.py +0 -0
  173. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_db_plans.py +0 -0
  174. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_db_queries.py +0 -0
  175. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_db_schema.py +0 -0
  176. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_git.py +0 -0
  177. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_git_frontmatter.py +0 -0
  178. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_git_sections.py +0 -0
  179. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_git_summary.py +0 -0
  180. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/shadow_parser.py +0 -0
  181. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/00-variables.css +0 -0
  182. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/01-base.css +0 -0
  183. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/02-tooltips.css +0 -0
  184. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/09-left-rail.css +0 -0
  185. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/10-header.css +0 -0
  186. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/11-connection-bar.css +0 -0
  187. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/20-messages.css +0 -0
  188. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/21-tool-blocks.css +0 -0
  189. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/22-edit-diff.css +0 -0
  190. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/23-thinking.css +0 -0
  191. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/24-background-tasks.css +0 -0
  192. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/25-context-block.css +0 -0
  193. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/26-session-setup.css +0 -0
  194. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/30-markdown.css +0 -0
  195. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/40-input.css +0 -0
  196. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/41-autocomplete.css +0 -0
  197. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/42-activity-strip.css +0 -0
  198. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/43-file-autocomplete.css +0 -0
  199. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/44-snippets-autocomplete.css +0 -0
  200. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/45-selection-bar.css +0 -0
  201. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/46-keyboard-bar.css +0 -0
  202. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/47-keyboard-longpress.css +0 -0
  203. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/47-token-profile.css +0 -0
  204. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/50-welcome.css +0 -0
  205. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/51-modals.css +0 -0
  206. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/52-utilities.css +0 -0
  207. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/53-image-upload.css +0 -0
  208. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/54-todo-list.css +0 -0
  209. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/55-file-upload.css +0 -0
  210. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/56-chat-navigator.css +0 -0
  211. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/56-permission-card.css +0 -0
  212. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/56-plan-approval.css +0 -0
  213. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/56-question-form.css +0 -0
  214. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/57-swipe-indicator.css +0 -0
  215. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/58-session-families.css +0 -0
  216. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/59-about.css +0 -0
  217. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/61-log-explorer.css +0 -0
  218. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/62-json-tree.css +0 -0
  219. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/62-skills-widget.css +0 -0
  220. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/63-commands-widget.css +0 -0
  221. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/63-plugins-widget.css +0 -0
  222. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/63-terminal.css +0 -0
  223. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/64-search-files-widget.css +0 -0
  224. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/65-snippets-widget.css +0 -0
  225. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/66-active-sessions.css +0 -0
  226. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/66-agents-widget.css +0 -0
  227. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/66-file-explorer-widget.css +0 -0
  228. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/66-git-panel.css +0 -0
  229. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/66-history-explorer.css +0 -0
  230. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/67-diff-viewer.css +0 -0
  231. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/67-editor-view.css +0 -0
  232. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/67-file-preview-widget.css +0 -0
  233. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-browser-widget.css +0 -0
  234. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-compare-wizard.css +0 -0
  235. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-csv-preview.css +0 -0
  236. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-diff-preview.css +0 -0
  237. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-helpers-install-widget.css +0 -0
  238. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-image-annotate.css +0 -0
  239. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-terminal-view.css +0 -0
  240. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/68-uploads-widget.css +0 -0
  241. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/69-cost-analytics.css +0 -0
  242. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/70-config-panel.css +0 -0
  243. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/70-excalidraw.css +0 -0
  244. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/70-prompt-explorer.css +0 -0
  245. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/71-chart.css +0 -0
  246. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/72-discussion-sidebar.css +0 -0
  247. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/74-debug-logs.css +0 -0
  248. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/80-open-dialog.css +0 -0
  249. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/80-quick-switcher.css +0 -0
  250. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/80-widget-system.css +0 -0
  251. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/81-quick-actions.css +0 -0
  252. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/82-context-popover.css +0 -0
  253. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/83-context-menu.css +0 -0
  254. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/85-lazy-loading.css +0 -0
  255. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/86-zen-mode.css +0 -0
  256. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/87-grid-switcher.css +0 -0
  257. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/css/login.css +0 -0
  258. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/dist/app.bundle.js +0 -0
  259. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/feature-triage.html +0 -0
  260. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/apple-touch-icon.png +0 -0
  261. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/favicon-32.png +0 -0
  262. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/favicon.ico +0 -0
  263. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-128.png +0 -0
  264. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-144.png +0 -0
  265. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-152.png +0 -0
  266. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-180.png +0 -0
  267. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-192.png +0 -0
  268. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-384.png +0 -0
  269. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-512.png +0 -0
  270. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-72.png +0 -0
  271. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-96.png +0 -0
  272. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/action-delegate.js +0 -0
  273. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/activity-strip.js +0 -0
  274. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/context-menus.js +0 -0
  275. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/file-preview.js +0 -0
  276. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/init-ui.js +0 -0
  277. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/input-events.js +0 -0
  278. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/input-resize.js +0 -0
  279. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/message-actions.js +0 -0
  280. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/panels.js +0 -0
  281. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/rendering-delegators.js +0 -0
  282. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/server-loading.js +0 -0
  283. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/session-ops.js +0 -0
  284. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/session-switch.js +0 -0
  285. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/settings-helpers.js +0 -0
  286. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app/startup-welcome.js +0 -0
  287. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app-context.js +0 -0
  288. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/app.js +0 -0
  289. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/auth-fetch.js +0 -0
  290. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/background-tasks.js +0 -0
  291. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/boot.js +0 -0
  292. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/caret-position.js +0 -0
  293. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/chat-navigator.js +0 -0
  294. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/chat-search.js +0 -0
  295. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/command-executor.js +0 -0
  296. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/command-store.js +0 -0
  297. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/components.js +0 -0
  298. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/config.js +0 -0
  299. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/context-menu.js +0 -0
  300. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/chat-controller.js +0 -0
  301. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/dialog-controller.js +0 -0
  302. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/tab-controller.js +0 -0
  303. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/thinking-controller.js +0 -0
  304. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/diff-utils.js +0 -0
  305. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/drafts-pill.js +0 -0
  306. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/editor-view.js +0 -0
  307. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/effort-settings.js +0 -0
  308. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/feature-triage.js +0 -0
  309. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/file-autocomplete.js +0 -0
  310. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/file-tabs.js +0 -0
  311. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/gestures.js +0 -0
  312. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/grid-switcher.js +0 -0
  313. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/input-handler.js +0 -0
  314. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/keyboard-bar.js +0 -0
  315. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/layout-switcher.js +0 -0
  316. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/linkify-utils.js +0 -0
  317. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/login.js +0 -0
  318. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/open-dialog.js +0 -0
  319. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/orphan-terminals.js +0 -0
  320. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/path-utils.js +0 -0
  321. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/perf-marks.js +0 -0
  322. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/permission-settings.js +0 -0
  323. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/pointer-input.js +0 -0
  324. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/json-tree-menu.js +0 -0
  325. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/json-tree-toolbar.js +0 -0
  326. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/json-tree.js +0 -0
  327. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-breadcrumb.js +0 -0
  328. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-edit.js +0 -0
  329. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-events.js +0 -0
  330. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-history.js +0 -0
  331. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-inline-edit.js +0 -0
  332. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-poll.js +0 -0
  333. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-render.js +0 -0
  334. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-search.js +0 -0
  335. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-state.js +0 -0
  336. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-utils.js +0 -0
  337. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/chart-plugin.js +0 -0
  338. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/csv-plugin.js +0 -0
  339. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/diff-plugin.js +0 -0
  340. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/excalidraw-plugin.js +0 -0
  341. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/html-plugin.js +0 -0
  342. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/image-plugin.js +0 -0
  343. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/index.js +0 -0
  344. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/json-plugin.js +0 -0
  345. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/jsonl-plugin.js +0 -0
  346. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/markdown-plugin.js +0 -0
  347. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/panzoom-plugin.js +0 -0
  348. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/plugin-helpers.js +0 -0
  349. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/project-color-picker.js +0 -0
  350. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/project-colors.js +0 -0
  351. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/prompt-favorites.js +0 -0
  352. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-actions-menu.js +0 -0
  353. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-actions-registry.js +0 -0
  354. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/controller.js +0 -0
  355. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/fuzzy-scorer.js +0 -0
  356. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/index.js +0 -0
  357. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/base-provider.js +0 -0
  358. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/command-provider.js +0 -0
  359. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/file-provider.js +0 -0
  360. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/panel-provider.js +0 -0
  361. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/project-provider.js +0 -0
  362. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/read-files-provider.js +0 -0
  363. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/skills-provider.js +0 -0
  364. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/registry.js +0 -0
  365. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/ui/item.js +0 -0
  366. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/ui/picker.js +0 -0
  367. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/recent-opens.js +0 -0
  368. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/scroll-manager.js +0 -0
  369. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/scroll-state-machine.js +0 -0
  370. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/action-bar.js +0 -0
  371. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/index.js +0 -0
  372. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/selection-handler.js +0 -0
  373. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/state.js +0 -0
  374. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/agent-progress.js +0 -0
  375. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/handle-agent-message.js +0 -0
  376. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/handle-message.js +0 -0
  377. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/interactive.js +0 -0
  378. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/message-store.js +0 -0
  379. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/messages.js +0 -0
  380. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/persistence.js +0 -0
  381. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/restore.js +0 -0
  382. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session/sync.js +0 -0
  383. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session-container-pool.js +0 -0
  384. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session-setup-panel.js +0 -0
  385. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/session.js +0 -0
  386. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/shortcut-hints.js +0 -0
  387. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/shortcuts.js +0 -0
  388. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/skills-autocomplete.js +0 -0
  389. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/snippets-autocomplete.js +0 -0
  390. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/stash-refs-view.js +0 -0
  391. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/stash-ui.js +0 -0
  392. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/stash.js +0 -0
  393. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/status-bar.js +0 -0
  394. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/token-profile.js +0 -0
  395. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/tool-renderer-blocks.js +0 -0
  396. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/tool-renderer-thinking.js +0 -0
  397. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/tool-renderer.js +0 -0
  398. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/tooltips.js +0 -0
  399. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/upload-manager.js +0 -0
  400. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/utils.js +0 -0
  401. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/api.js +0 -0
  402. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/cards.js +0 -0
  403. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/context-menu.js +0 -0
  404. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/families.js +0 -0
  405. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/preview.js +0 -0
  406. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/state.js +0 -0
  407. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome.js +0 -0
  408. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/base-widget.js +0 -0
  409. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/device-manager.js +0 -0
  410. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/event-bus.js +0 -0
  411. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/icons.js +0 -0
  412. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/index.js +0 -0
  413. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/init.js +0 -0
  414. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/bottom-sheet.js +0 -0
  415. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/floating.js +0 -0
  416. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/index.js +0 -0
  417. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/modal.js +0 -0
  418. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/sidebar.js +0 -0
  419. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/tab.js +0 -0
  420. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/top-sheet.js +0 -0
  421. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/widget-manager.js +0 -0
  422. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/about-widget.js +0 -0
  423. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/active-sessions-widget.js +0 -0
  424. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/agents-widget.js +0 -0
  425. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/browser-widget.js +0 -0
  426. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/commands-widget.js +0 -0
  427. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/commit-sections.js +0 -0
  428. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/dir-autocomplete.js +0 -0
  429. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/gestures.js +0 -0
  430. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/models-tab.js +0 -0
  431. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/quick-actions-tab.js +0 -0
  432. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/shortcut-editor.js +0 -0
  433. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/state.js +0 -0
  434. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/system-controls.js +0 -0
  435. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config-widget.js +0 -0
  436. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/cost-analytics-widget.js +0 -0
  437. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/debug-widget.js +0 -0
  438. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/diff-viewer-widget.js +0 -0
  439. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/discussion-widget.js +0 -0
  440. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/file-explorer-widget.js +0 -0
  441. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/file-preview-widget.js +0 -0
  442. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/git-widget.js +0 -0
  443. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/helpers-install-widget.js +0 -0
  444. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/history-explorer-widget.js +0 -0
  445. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/image-annotate-widget.js +0 -0
  446. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/image-preview-widget.js +0 -0
  447. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/index.js +0 -0
  448. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/log-explorer-widget.js +0 -0
  449. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/plugins-widget.js +0 -0
  450. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/prompt-explorer-widget.js +0 -0
  451. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/search-files-widget.js +0 -0
  452. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/skills-widget.js +0 -0
  453. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/snippets-widget.js +0 -0
  454. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/sub-agents-widget.js +0 -0
  455. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/tasks-widget.js +0 -0
  456. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/connection.js +0 -0
  457. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/gestures.js +0 -0
  458. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/init.js +0 -0
  459. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/link-providers.js +0 -0
  460. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/osc52.js +0 -0
  461. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/render.js +0 -0
  462. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/size.js +0 -0
  463. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/state.js +0 -0
  464. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/wrap-utils.js +0 -0
  465. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal-widget.js +0 -0
  466. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/uploads-widget.js +0 -0
  467. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/zen-widget.js +0 -0
  468. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/login.html +0 -0
  469. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/manifest.json +0 -0
  470. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/sw.js +0 -0
  471. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/LICENSES.txt +0 -0
  472. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/README.md +0 -0
  473. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/codemirror.js +0 -0
  474. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/codemirror.js.LEGAL.txt +0 -0
  475. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/github-markdown-dark.min.css +0 -0
  476. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-github-dark.min.css +0 -0
  477. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-dockerfile.min.js +0 -0
  478. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-nginx.min.js +0 -0
  479. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-properties.min.js +0 -0
  480. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-scala.min.js +0 -0
  481. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight.min.js +0 -0
  482. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/marked.min.js +0 -0
  483. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/purify.min.js +0 -0
  484. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/xterm-addon-fit.js +0 -0
  485. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/xterm.css +0 -0
  486. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/vendor/xterm.js +0 -0
  487. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/static/web-client.html +0 -0
  488. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/subprocess_registry.py +0 -0
  489. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tls_cert.py +0 -0
  490. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tools/excalidraw-to-svg.js +0 -0
  491. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tools/install-helpers.sh +0 -0
  492. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tools/shadow-git +0 -0
  493. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tools/shadow-query +0 -0
  494. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/tools/vegalite-to-svg.js +0 -0
  495. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/turn_query.py +0 -0
  496. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/turn_tracker.py +0 -0
  497. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/__init__.py +0 -0
  498. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/agent_cli.py +0 -0
  499. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/bash_file_ops.py +0 -0
  500. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/chart.py +0 -0
  501. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/excalidraw.py +0 -0
  502. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/file_lock.py +0 -0
  503. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/file_paths.py +0 -0
  504. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/generate_icons.py +0 -0
  505. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/proc.py +0 -0
  506. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/pty_backend.py +0 -0
  507. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/pty_windows.py +0 -0
  508. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/utils/token_profiles.py +0 -0
  509. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/viewer_templates.py +0 -0
  510. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code/welcome_search.py +0 -0
  511. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code.egg-info/dependency_links.txt +0 -0
  512. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code.egg-info/entry_points.txt +0 -0
  513. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code.egg-info/requires.txt +0 -0
  514. {painapple_code-1.1.1 → painapple_code-1.1.2}/src/painapple_code.egg-info/top_level.txt +0 -0
  515. {painapple_code-1.1.1 → painapple_code-1.1.2}/start.sh +0 -0
@@ -2,6 +2,16 @@
2
2
 
3
3
  Notable changes are documented here per release. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow [SemVer](https://semver.org/), and the git tag is the single source of truth for the version (the PyPI wheel, the Docker image tag, and `__version__` all derive from it).
4
4
 
5
+ ## 1.1.2 — 2026-09-30
6
+
7
+ ### Added
8
+
9
+ - `pbcopy` in the built-in terminal on Linux and macOS servers: `git diff | pbcopy` copies to the clipboard of the device you're using (via OSC 52, so it needs Settings → Terminal → "Terminal apps may write to clipboard"; inside tmux also `set -g allow-passthrough on`). A server's native `pbcopy` still takes priority.
10
+
11
+ ### Changed
12
+
13
+ - Claude Sonnet 5.5 replaces Sonnet 5 in the model catalog, and is the new default model for the shadow-git-helper subagent.
14
+
5
15
  ## 1.1.1 — 2026-09-23
6
16
 
7
17
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: painapple-code
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: Self-hosted remote UI for Claude Code that journals every turn - background AI summaries become shadow-git commits and a queryable DuckDB history
5
5
  Author-email: Michał Booth-Wrotkowski <michal@boothw.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -59,6 +59,10 @@ With it enabled, three guardrails stay on unconditionally:
59
59
  - **Reading the clipboard is never allowed.** The OSC 52 read form is consumed and refused, so a terminal program can't see what you've copied.
60
60
  - **Reconnects never replay writes.** Scrollback replayed after a reconnect (which iPad PWAs do constantly) is stripped of clipboard sequences server-side, so an hour-old yank can't re-hijack your clipboard when a tab wakes up.
61
61
 
62
+ ### `pbcopy`
63
+
64
+ Terminals on Linux and macOS servers come with a `pbcopy` that works like the macOS one, except it copies to the clipboard of the device you're using. `git diff | pbcopy`, `pbcopy < notes.txt` and `pwd | pbcopy` all work. It sends OSC 52, so it needs the setting above, and inside tmux it also needs `set -g allow-passthrough on`. It's added to the **end** of `PATH`, which means a macOS server's own `pbcopy` still takes priority. There is no `pbpaste`, because terminal programs are never allowed to read the clipboard. To paste, use Cmd/Ctrl+V.
65
+
62
66
  ## Logging into Claude from the terminal
63
67
 
64
68
  The Claude CLI's OAuth login is interactive, so the `/login` slash command drops you into a terminal tab pre-typed with `claude auth login` — follow the prompts there. If the CLI hits an expired or missing token mid-session, the error card in the chat includes a one-click **Login** button that opens the same terminal. `/logout` mirrors this with `claude auth logout`.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.1.1'
22
- __version_tuple__ = version_tuple = (1, 1, 1)
21
+ __version__ = version = '1.1.2'
22
+ __version_tuple__ = version_tuple = (1, 1, 2)
23
23
 
24
- __commit_id__ = commit_id = 'g8c9ae22'
24
+ __commit_id__ = commit_id = 'g2fe4788'
@@ -3,8 +3,8 @@
3
3
  # this over models.yaml. Keep in sync with the shipped models.yaml.
4
4
 
5
5
  selectable:
6
- - id: claude-sonnet-5
7
- label: Sonnet 5
6
+ - id: claude-sonnet-5-5
7
+ label: Sonnet 5.5
8
8
  desc: Balanced speed and capability
9
9
  - id: claude-opus-5-5[1m]
10
10
  label: Opus 5.5 (1M)
@@ -3,8 +3,8 @@
3
3
  # Edit via Settings → Providers, or by hand (both work).
4
4
 
5
5
  selectable:
6
- - id: claude-sonnet-5
7
- label: Sonnet 5
6
+ - id: claude-sonnet-5-5
7
+ label: Sonnet 5.5
8
8
  desc: Balanced speed and capability
9
9
  - id: claude-opus-5-5[1m]
10
10
  label: Opus 5.5 (1M)
@@ -633,7 +633,7 @@ def save_global_config(config: dict):
633
633
  # Persisted in the global config so it survives helper reinstalls
634
634
  # (install-helpers.sh cp -f's the bundled default over the top; we re-apply this).
635
635
  HELPER_AGENT_INHERIT = "inherit"
636
- DEFAULT_HELPER_AGENT_MODEL = "claude-sonnet-5"
636
+ DEFAULT_HELPER_AGENT_MODEL = "claude-sonnet-5-5"
637
637
 
638
638
 
639
639
  def get_helper_agent_options() -> list[str]:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: shadow-git-helper
3
3
  description: "Searches Shadow Git repository to find file history, changes by session, blame analysis, and code archaeology. Uses git commands on the bare repo to trace when/how/why code changed."
4
- model: claude-sonnet-5
4
+ model: claude-sonnet-5-5
5
5
  ---
6
6
 
7
7
  # Shadow Git Helper - Code Archaeologist
@@ -0,0 +1,40 @@
1
+ #!/bin/sh
2
+ # pbcopy for painapple terminals — copies stdin to the BROWSER's clipboard.
3
+ #
4
+ # The PTY runs on the server, so a native clipboard tool (if any) would
5
+ # write the server's clipboard, not the one on the device you're typing on.
6
+ # Instead this emits OSC 52 (ESC ] 52 ; c ; <base64> BEL), which the
7
+ # terminal widget turns into navigator.clipboard.writeText() — see
8
+ # static/js/widgets/terminal/osc52.js. That handler is opt-in
9
+ # (Settings → Terminal → "Terminal apps may write to clipboard"); when it's
10
+ # off the widget toasts instead of copying, so a failure is never silent.
11
+ #
12
+ # The server APPENDS this directory to PATH, so a real pbcopy (macOS) still
13
+ # wins. Usage mirrors macOS: `cmd | pbcopy`, `pbcopy < file`. Flags that
14
+ # macOS pbcopy accepts (-pboard, -Prefer) are ignored.
15
+
16
+ # Where the escape goes: the controlling terminal, so `pbcopy >/dev/null`
17
+ # and redirected stdout still work. No tty → nothing can receive it.
18
+ tty_out=/dev/tty
19
+ if ! { true >"$tty_out"; } 2>/dev/null; then
20
+ echo "pbcopy: no terminal to send the clipboard escape to" >&2
21
+ exit 1
22
+ fi
23
+
24
+ # The widget refuses payloads over 2,000,000 base64 chars (~1.5 MB of text).
25
+ max_bytes=1500000
26
+
27
+ data=$(base64 | tr -d '\r\n')
28
+ if [ "${#data}" -gt 2000000 ]; then
29
+ echo "pbcopy: input too large for the terminal clipboard (max ~$max_bytes bytes)" >&2
30
+ exit 1
31
+ fi
32
+
33
+ if [ -n "$TMUX" ]; then
34
+ # Inside tmux the outer terminal never sees an app's raw OSC 52 unless
35
+ # `set-clipboard on`; wrap it in DCS passthrough (tmux >= 3.3 also
36
+ # needs `set -g allow-passthrough on`).
37
+ printf '\033Ptmux;\033\033]52;c;%s\a\033\\' "$data" >"$tty_out"
38
+ else
39
+ printf '\033]52;c;%s\a' "$data" >"$tty_out"
40
+ fi
@@ -20,6 +20,19 @@ import termios
20
20
 
21
21
  logger = logging.getLogger(__name__)
22
22
 
23
+ # Shims that make clipboard tools reach the BROWSER (tools/term-bin/pbcopy
24
+ # emits OSC 52, which the terminal widget handles). Appended — never
25
+ # prepended — to PATH, so a native pbcopy (a macOS server) still wins.
26
+ TERM_BIN_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'tools', 'term-bin')
27
+
28
+
29
+ def with_term_bin(path: str) -> str:
30
+ """PATH with TERM_BIN_DIR appended once (idempotent for nested spawns)."""
31
+ parts = [p for p in path.split(os.pathsep) if p] if path else []
32
+ if TERM_BIN_DIR in parts:
33
+ return path
34
+ return os.pathsep.join(parts + [TERM_BIN_DIR])
35
+
23
36
 
24
37
  class PosixPty:
25
38
  """A forked shell attached to a pty master fd."""
@@ -147,6 +160,7 @@ def spawn_pty(cwd: str, rows: int = 24, cols: int = 80) -> PosixPty:
147
160
 
148
161
  os.environ['TERM'] = 'xterm-256color'
149
162
  os.environ['COLORTERM'] = 'truecolor'
163
+ os.environ['PATH'] = with_term_bin(os.environ.get('PATH', ''))
150
164
 
151
165
  shell = os.environ.get('SHELL', '/bin/bash')
152
166
  os.execvp(shell, [shell, '-i'])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: painapple-code
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: Self-hosted remote UI for Claude Code that journals every turn - background AI summaries become shadow-git commits and a queryable DuckDB history
5
5
  Author-email: Michał Booth-Wrotkowski <michal@boothw.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -496,6 +496,7 @@ src/painapple_code/tools/shadow-git
496
496
  src/painapple_code/tools/shadow-query
497
497
  src/painapple_code/tools/vegalite-to-svg.js
498
498
  src/painapple_code/tools/agents/shadow-git-helper.md
499
+ src/painapple_code/tools/term-bin/pbcopy
499
500
  src/painapple_code/utils/__init__.py
500
501
  src/painapple_code/utils/agent_cli.py
501
502
  src/painapple_code/utils/bash_file_ops.py
@@ -504,6 +504,7 @@
504
504
  "src/painapple_code/tools/install-helpers.sh",
505
505
  "src/painapple_code/tools/shadow-git",
506
506
  "src/painapple_code/tools/shadow-query",
507
+ "src/painapple_code/tools/term-bin/pbcopy",
507
508
  "src/painapple_code/tools/vegalite-to-svg.js",
508
509
  "src/painapple_code/turn_query.py",
509
510
  "src/painapple_code/turn_tracker.py",
@@ -633,6 +634,7 @@
633
634
  "tests/test_process_chain_collapse.py",
634
635
  "tests/test_providers.py",
635
636
  "tests/test_security_headers.py",
637
+ "tests/test_terminal_pbcopy.py",
636
638
  "tests/test_text_io_encoding.py",
637
639
  "tests/test_tls_cert_san.py",
638
640
  "tests/test_tls_optional.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "1.1.2",
3
+ "distance": 0,
4
+ "node": "g2fe4788",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-30"
8
+ }
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "1.1.1",
3
- "distance": 0,
4
- "node": "g8c9ae22",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-09-22"
8
- }
File without changes
File without changes
File without changes
File without changes