painapple-code 1.1.0__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.
- {painapple_code-1.1.0 → painapple_code-1.1.2}/CHANGELOG.md +21 -0
- {painapple_code-1.1.0/src/painapple_code.egg-info → painapple_code-1.1.2}/PKG-INFO +1 -1
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/terminal.md +4 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/profiles.md +1 -1
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/server-cli.md +1 -1
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/_version.py +3 -3
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/auth_middleware.py +3 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/setup_cmd.py +34 -7
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/data/models.defaults.yaml +5 -5
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/data/models.yaml +5 -5
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/paths.py +1 -1
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/server.py +30 -4
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/login.html +6 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/web-client.html +6 -6
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/agents/shadow-git-helper.md +1 -1
- painapple_code-1.1.2/src/painapple_code/tools/term-bin/pbcopy +40 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/pty_posix.py +14 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2/src/painapple_code.egg-info}/PKG-INFO +1 -1
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/SOURCES.txt +1 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/scm_file_list.json +2 -0
- painapple_code-1.1.2/src/painapple_code.egg-info/scm_version.json +8 -0
- painapple_code-1.1.0/src/painapple_code.egg-info/scm_version.json +0 -8
- {painapple_code-1.1.0 → painapple_code-1.1.2}/.devcontainer/devcontainer.json +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/.dockerignore +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/.gitignore +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/CONTRIBUTING.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/Dockerfile +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/LICENSE +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/MANIFEST.in +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/README.dockerhub.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/README.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/SECURITY.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/THIRD_PARTY_NOTICES.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/build-frontend.sh +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docker-compose.yml +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docker-entrypoint.sh +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/annotate-editor.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/browser-widget.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/comments-stash.gif +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/cost-analytics.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/favicon.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/input-autocomplete.gif +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/logo.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/markdown-quick-edit.gif +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/overview.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/prompt-history.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/quick-switcher.gif +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/quick-switcher.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/settings-appearance.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/settings-claude.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/shadow-journal.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/snippets-picker.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/terminal.gif +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/turn-summary-bar-expanded.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/turn-summary-bar.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/welcome-screen.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/zen-mode.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/changelog.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/features.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/first-run.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/install-devcontainer.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/install-docker.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/install-pip.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/requirements.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/security.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/analytics-and-history.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/claude-artifacts.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/customization.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/files.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/git-and-diffs.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/images-and-annotation.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/input-and-commands.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/ipad-and-mobile.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/permissions-and-thinking.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/providers.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/sessions.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/shadow-git.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/stash-and-discussions.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/welcome-screen.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/guides/zen-mode.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/index.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/api.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/commands.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/data-storage.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/keyboard-shortcuts.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/reference/optional-helpers.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/mkdocs.yml +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/painapple-docker.sh +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/pyproject.toml +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/requirements-docs.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/requirements.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/setup.cfg +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/setup.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/__main__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/claude_seed.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/config.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/container.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/launch.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/deploy/runtime.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/lifecycle_cmd.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/list_cmd.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/manage_cmd.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/netinfo.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/profiles.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/serve_args.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/serve_config.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cli/ui.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/cost_analytics.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/data/presets.defaults.json +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/data/strings.yaml +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/helpers.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/prompt_explorer.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/base.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude/capabilities.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude/errors.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude/launch.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude/summary.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude/translate.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude_sdk/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/claude_sdk/driver.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex/capabilities.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex/errors.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex/translate.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/capabilities.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/launch.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/summary.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/translate.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/providers/codex_app_server/transport.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_agents.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_app.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_app_commit_sections.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_app_config.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_app_session_prefs.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_browser.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_commands.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_costs.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_drafts.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_exec.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_files.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_git.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_logs.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_plugins.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_project_config.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_prompts.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_providers.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_search.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_session_stash.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_session_welcome.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_sessions.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow_db.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow_files.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_shadow_search.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_skills.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_tasks.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_terminal.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_upload.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/api_viewer.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/dependencies.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/routes/ws_chat.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/server_logging.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/services/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/services/agent_session.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/session_store.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/session_store_core.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_db.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_db_plans.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_db_queries.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_db_schema.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_git.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_git_frontmatter.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_git_sections.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_git_summary.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/shadow_parser.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/00-variables.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/01-base.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/02-tooltips.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/09-left-rail.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/10-header.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/11-connection-bar.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/20-messages.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/21-tool-blocks.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/22-edit-diff.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/23-thinking.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/24-background-tasks.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/25-context-block.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/26-session-setup.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/30-markdown.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/40-input.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/41-autocomplete.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/42-activity-strip.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/43-file-autocomplete.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/44-snippets-autocomplete.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/45-selection-bar.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/46-keyboard-bar.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/47-keyboard-longpress.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/47-token-profile.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/50-welcome.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/51-modals.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/52-utilities.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/53-image-upload.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/54-todo-list.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/55-file-upload.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/56-chat-navigator.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/56-permission-card.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/56-plan-approval.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/56-question-form.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/57-swipe-indicator.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/58-session-families.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/59-about.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/61-log-explorer.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/62-json-tree.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/62-skills-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/63-commands-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/63-plugins-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/63-terminal.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/64-search-files-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/65-snippets-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/66-active-sessions.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/66-agents-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/66-file-explorer-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/66-git-panel.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/66-history-explorer.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/67-diff-viewer.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/67-editor-view.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/67-file-preview-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-browser-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-compare-wizard.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-csv-preview.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-diff-preview.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-helpers-install-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-image-annotate.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-terminal-view.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/68-uploads-widget.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/69-cost-analytics.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/70-config-panel.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/70-excalidraw.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/70-prompt-explorer.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/71-chart.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/72-discussion-sidebar.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/74-debug-logs.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/80-open-dialog.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/80-quick-switcher.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/80-widget-system.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/81-quick-actions.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/82-context-popover.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/83-context-menu.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/85-lazy-loading.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/86-zen-mode.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/87-grid-switcher.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/css/login.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/dist/app.bundle.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/feature-triage.html +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/apple-touch-icon.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/favicon-32.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/favicon.ico +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-128.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-144.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-152.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-180.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-192.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-384.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-512.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-72.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/icons/icon-96.png +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/action-delegate.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/activity-strip.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/context-menus.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/file-preview.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/init-ui.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/input-events.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/input-resize.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/message-actions.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/panels.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/rendering-delegators.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/server-loading.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/session-ops.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/session-switch.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/settings-helpers.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app/startup-welcome.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app-context.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/app.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/auth-fetch.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/background-tasks.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/boot.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/caret-position.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/chat-navigator.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/chat-search.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/command-executor.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/command-store.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/components.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/config.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/context-menu.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/chat-controller.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/dialog-controller.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/tab-controller.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/controllers/thinking-controller.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/diff-utils.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/drafts-pill.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/editor-view.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/effort-settings.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/feature-triage.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/file-autocomplete.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/file-tabs.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/gestures.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/grid-switcher.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/input-handler.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/keyboard-bar.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/layout-switcher.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/linkify-utils.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/login.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/open-dialog.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/orphan-terminals.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/path-utils.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/perf-marks.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/permission-settings.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/pointer-input.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/json-tree-menu.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/json-tree-toolbar.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/json-tree.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-breadcrumb.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-edit.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-events.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-history.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-inline-edit.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-poll.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-render.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-search.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-state.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview/preview-utils.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/chart-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/csv-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/diff-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/excalidraw-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/html-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/image-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/index.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/json-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/jsonl-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/markdown-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/panzoom-plugin.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/preview-plugins/plugin-helpers.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/project-color-picker.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/project-colors.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/prompt-favorites.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-actions-menu.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-actions-registry.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/controller.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/fuzzy-scorer.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/index.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/base-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/command-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/file-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/panel-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/project-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/read-files-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/providers/skills-provider.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/registry.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/ui/item.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/quick-switcher/ui/picker.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/recent-opens.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/scroll-manager.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/scroll-state-machine.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/action-bar.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/index.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/selection-handler.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/selection/state.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/agent-progress.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/handle-agent-message.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/handle-message.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/interactive.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/message-store.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/messages.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/persistence.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/restore.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session/sync.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session-container-pool.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session-setup-panel.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/session.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/shortcut-hints.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/shortcuts.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/skills-autocomplete.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/snippets-autocomplete.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/stash-refs-view.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/stash-ui.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/stash.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/status-bar.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/token-profile.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/tool-renderer-blocks.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/tool-renderer-thinking.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/tool-renderer.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/tooltips.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/upload-manager.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/utils.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/api.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/cards.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/context-menu.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/families.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/preview.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome/state.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/welcome.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/base-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/device-manager.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/event-bus.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/icons.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/index.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/init.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/bottom-sheet.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/floating.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/index.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/modal.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/sidebar.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/tab.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/types/top-sheet.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widget-system/widget-manager.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/about-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/active-sessions-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/agents-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/browser-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/commands-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/commit-sections.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/dir-autocomplete.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/gestures.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/models-tab.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/quick-actions-tab.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/shortcut-editor.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/state.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config/system-controls.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/config-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/cost-analytics-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/debug-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/diff-viewer-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/discussion-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/file-explorer-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/file-preview-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/git-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/helpers-install-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/history-explorer-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/image-annotate-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/image-preview-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/index.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/log-explorer-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/plugins-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/prompt-explorer-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/search-files-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/skills-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/snippets-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/sub-agents-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/tasks-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/connection.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/gestures.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/init.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/link-providers.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/osc52.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/render.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/size.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/state.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal/wrap-utils.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/terminal-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/uploads-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/js/widgets/zen-widget.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/manifest.json +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/sw.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/LICENSES.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/README.md +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/codemirror.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/codemirror.js.LEGAL.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/github-markdown-dark.min.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-github-dark.min.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-dockerfile.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-nginx.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-properties.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight-lang-scala.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/highlight.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/marked.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/purify.min.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/xterm-addon-fit.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/xterm.css +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/static/vendor/xterm.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/subprocess_registry.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tls_cert.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/excalidraw-to-svg.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/install-helpers.sh +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/shadow-git +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/shadow-query +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/vegalite-to-svg.js +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/turn_query.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/turn_tracker.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/__init__.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/agent_cli.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/bash_file_ops.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/chart.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/excalidraw.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/file_lock.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/file_paths.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/generate_icons.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/proc.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/pty_backend.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/pty_windows.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/utils/token_profiles.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/viewer_templates.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/welcome_search.py +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/dependency_links.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/entry_points.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/requires.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/top_level.txt +0 -0
- {painapple_code-1.1.0 → painapple_code-1.1.2}/start.sh +0 -0
|
@@ -2,6 +2,27 @@
|
|
|
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
|
+
|
|
15
|
+
## 1.1.1 — 2026-09-23
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Claude Opus 5.5 (1M context) in the model catalog, replacing Opus 4.8.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Fresh installs show the real app icon — in the browser tab, on the login page and as the installed PWA/home-screen icon — instead of a generic "P" tile, and the service worker no longer fails to install from the login page.
|
|
24
|
+
- `painapple setup` no longer forces a container-runtime choice: a **Skip** option (the default when nothing is configured yet) leaves the runtime and image untouched, and an existing custom runtime path is kept on Enter.
|
|
25
|
+
|
|
5
26
|
## 1.1.0 — 2026-09-08
|
|
6
27
|
|
|
7
28
|
Also ships everything listed under **1.0.5** below — that tag was cut but never published.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: painapple-code
|
|
3
|
-
Version: 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`.
|
|
@@ -24,7 +24,7 @@ It's the containerized twin of a bare `painapple`: the current directory (or `--
|
|
|
24
24
|
|
|
25
25
|
## Global defaults vs profiles
|
|
26
26
|
|
|
27
|
-
`painapple setup` (no name) saves **global** defaults to `~/.painapple-code/serve.yaml`: the network bind (host/port/TLS) for a bare serve, and the container runtime for `--in-docker` — a chooser listing every runtime detected on the machine (with version and path), a custom binary path, and the image tag.
|
|
27
|
+
`painapple setup` (no name) saves **global** defaults to `~/.painapple-code/serve.yaml`: the network bind (host/port/TLS) for a bare serve, and the container runtime for `--in-docker` — optional (**Skip** is the default until one is configured), a chooser listing every runtime detected on the machine (with version and path), a custom binary path, and the image tag.
|
|
28
28
|
|
|
29
29
|
Workspace and cosmetics are deliberately **not** global: a bare `painapple` always serves the directory you launch it from, and a label/accent only makes sense on a named deployment. Those live in profiles.
|
|
30
30
|
|
|
@@ -6,7 +6,7 @@ Flags and environment variables for the default server invocation — `painapple
|
|
|
6
6
|
|
|
7
7
|
## Saved defaults — `painapple setup`
|
|
8
8
|
|
|
9
|
-
`painapple setup` is an interactive wizard that saves **global** defaults to `~/.painapple-code/serve.yaml`: the network bind (host/port/TLS) a bare `painapple` starts with, and the container runtime + image used by [`--in-docker`](profiles.md#ad-hoc-container-mode-in-docker). Explicit flags always override the saved values. Two quick sections plus a review screen; nothing is written until you confirm.
|
|
9
|
+
`painapple setup` is an interactive wizard that saves **global** defaults to `~/.painapple-code/serve.yaml`: the network bind (host/port/TLS) a bare `painapple` starts with, and — optionally, skippable if you don't use containers — the container runtime + image used by [`--in-docker`](profiles.md#ad-hoc-container-mode-in-docker). Explicit flags always override the saved values. Two quick sections plus a review screen; nothing is written until you confirm.
|
|
10
10
|
|
|
11
11
|
Workspace and cosmetics are **profile-only** since the CLI unification — a bare `painapple` serves the cwd, and a label/accent belongs to a named deployment. `painapple setup NAME` creates/edits that [profile](profiles.md) instead (host or docker mode).
|
|
12
12
|
|
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 1,
|
|
21
|
+
__version__ = version = '1.1.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g2fe4788'
|
|
@@ -103,6 +103,9 @@ PUBLIC_PATHS = frozenset({
|
|
|
103
103
|
# the form falls back to a native GET submit and the password lands in
|
|
104
104
|
# the URL instead of a POST to /api/login.
|
|
105
105
|
"/static/js/login.js",
|
|
106
|
+
# Implicit browser request. /instance-icons/ is the public icon channel;
|
|
107
|
+
# this is the same file under the name the browser asks for on its own.
|
|
108
|
+
"/favicon.ico",
|
|
106
109
|
})
|
|
107
110
|
|
|
108
111
|
PUBLIC_PREFIXES = (
|
|
@@ -147,24 +147,51 @@ def step_cosmetics(cfg, back, n=3, default_label=""):
|
|
|
147
147
|
def step_runtime(cfg, back, n=2):
|
|
148
148
|
from painapple_code.cli.deploy.runtime import detect_runtimes
|
|
149
149
|
_section(n, "Container runtime",
|
|
150
|
-
"
|
|
150
|
+
"Optional — only used by `painapple --in-docker` and "
|
|
151
|
+
"docker-mode profiles")
|
|
151
152
|
detected = detect_runtimes()
|
|
152
|
-
|
|
153
|
+
# "Skip" leaves runtime/image untouched rather than writing a value:
|
|
154
|
+
# a user who never types --in-docker has nothing to answer here, and
|
|
155
|
+
# one who already configured a runtime shouldn't have to re-pick it
|
|
156
|
+
# to get past the step.
|
|
157
|
+
choices = [Choice("skip", "Skip — not using containers",
|
|
158
|
+
"leave these defaults alone"),
|
|
159
|
+
Choice("", "Auto", "prefer docker, fall back to podman")]
|
|
153
160
|
for name, path, version in detected:
|
|
154
161
|
choices.append(Choice(name, f"{name} {version}".strip(), path))
|
|
162
|
+
|
|
163
|
+
# A configured binary path is offered as its own row, so Enter keeps
|
|
164
|
+
# it. Defaulting to "custom" instead (as this once did) pre-armed the
|
|
165
|
+
# binary-path text prompt for anyone whose runtime came from a custom
|
|
166
|
+
# pick or the docker.yaml migration. The row is added even when the
|
|
167
|
+
# path matches a detected runtime: `podman` and `/usr/bin/podman` are
|
|
168
|
+
# different saved values (PATH lookup vs pinned binary), so collapsing
|
|
169
|
+
# them would rewrite the user's config on a plain Enter.
|
|
170
|
+
current = cfg.get("runtime") or ""
|
|
171
|
+
if current and current not in {c.value for c in choices}:
|
|
172
|
+
choices.append(Choice(current, f"Custom: {current}",
|
|
173
|
+
"configured binary path"))
|
|
155
174
|
choices.append(Choice("custom", "Custom binary path…",
|
|
156
175
|
"a docker/podman-compatible CLI"))
|
|
157
176
|
if not detected:
|
|
158
177
|
warn("Neither docker nor podman found on PATH — --in-docker needs "
|
|
159
|
-
"one installed (or a custom binary path)."
|
|
178
|
+
"one installed (or a custom binary path). Skip if you don't "
|
|
179
|
+
"use containers.")
|
|
160
180
|
|
|
161
|
-
|
|
181
|
+
# Nothing configured yet → land on Skip, so a user who only came for
|
|
182
|
+
# the network settings can Enter straight past. Note "" (Auto) is
|
|
183
|
+
# itself a valid choice value, so this can't be folded into a
|
|
184
|
+
# `current in known` test.
|
|
162
185
|
known = {c.value for c in choices}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
186
|
+
if cfg.get("runtime") or cfg.get("image"):
|
|
187
|
+
default = current if current in known else ""
|
|
188
|
+
else:
|
|
189
|
+
default = "skip"
|
|
190
|
+
picked = ui.select("Runtime", choices, default=default, back=back)
|
|
166
191
|
if picked is BACK:
|
|
167
192
|
return BACK
|
|
193
|
+
if picked == "skip":
|
|
194
|
+
return None
|
|
168
195
|
if picked == "custom":
|
|
169
196
|
path = ui.text(
|
|
170
197
|
"Runtime binary path (docker/podman-compatible)",
|
|
@@ -3,14 +3,14 @@
|
|
|
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
|
+
- id: claude-opus-5-5[1m]
|
|
10
|
+
label: Opus 5.5 (1M)
|
|
11
|
+
desc: Long-running agentic coding and knowledge work
|
|
9
12
|
- id: claude-opus-5[1m]
|
|
10
13
|
label: Opus 5 (1M)
|
|
11
|
-
desc: Complex agentic coding and enterprise work
|
|
12
|
-
- id: claude-opus-4-8[1m]
|
|
13
|
-
label: Opus 4.8 (1M)
|
|
14
14
|
desc: Previous Opus tier (1M context)
|
|
15
15
|
- id: claude-fable-5-1[1m]
|
|
16
16
|
label: Fable 5.1
|
|
@@ -3,14 +3,14 @@
|
|
|
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
|
+
- id: claude-opus-5-5[1m]
|
|
10
|
+
label: Opus 5.5 (1M)
|
|
11
|
+
desc: Long-running agentic coding and knowledge work
|
|
9
12
|
- id: claude-opus-5[1m]
|
|
10
13
|
label: Opus 5 (1M)
|
|
11
|
-
desc: Complex agentic coding and enterprise work
|
|
12
|
-
- id: claude-opus-4-8[1m]
|
|
13
|
-
label: Opus 4.8 (1M)
|
|
14
14
|
desc: Previous Opus tier (1M context)
|
|
15
15
|
- id: claude-fable-5-1[1m]
|
|
16
16
|
label: Fable 5.1
|
|
@@ -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]:
|
|
@@ -1563,8 +1563,12 @@ async def service_worker():
|
|
|
1563
1563
|
# module graph, so it is not covered by either arm of `shell`.
|
|
1564
1564
|
f"/static/js/boot.js?v={version}",
|
|
1565
1565
|
*[f"/static/{rel}?v={version}" for rel in shell],
|
|
1566
|
-
|
|
1567
|
-
|
|
1566
|
+
# Public icon route, not /static/icons/ — cache.addAll() rejects
|
|
1567
|
+
# the ENTIRE precache if any single entry is non-2xx, so a 401
|
|
1568
|
+
# here would fail the whole service-worker install (e.g. when
|
|
1569
|
+
# the SW registers from the pre-auth login page).
|
|
1570
|
+
"/instance-icons/icon-192.png",
|
|
1571
|
+
"/instance-icons/icon-512.png",
|
|
1568
1572
|
]
|
|
1569
1573
|
# Inject version into SW
|
|
1570
1574
|
content = (
|
|
@@ -1625,6 +1629,18 @@ async def serve_instance_icon(filename: str):
|
|
|
1625
1629
|
raise HTTPException(status_code=404, detail="Icon not found")
|
|
1626
1630
|
|
|
1627
1631
|
|
|
1632
|
+
@app.get("/favicon.ico")
|
|
1633
|
+
async def serve_favicon():
|
|
1634
|
+
"""Root favicon, public — browsers request it implicitly.
|
|
1635
|
+
|
|
1636
|
+
Every HTML shell carries explicit <link rel="icon"> tags, so this is a
|
|
1637
|
+
backstop for the contexts that don't consult them (bare 404 pages, some
|
|
1638
|
+
feed/bookmark readers). Without it the implicit request 401s and the
|
|
1639
|
+
browser caches the failure as "no icon".
|
|
1640
|
+
"""
|
|
1641
|
+
return await serve_instance_icon("favicon.ico")
|
|
1642
|
+
|
|
1643
|
+
|
|
1628
1644
|
@app.get("/manifest.json")
|
|
1629
1645
|
async def manifest():
|
|
1630
1646
|
"""Serve PWA manifest, customized for instance identity if configured."""
|
|
@@ -1639,8 +1655,18 @@ async def manifest():
|
|
|
1639
1655
|
data["name"] = f"pAInapple Code {name}"
|
|
1640
1656
|
data["short_name"] = f"pAInapple {name}"
|
|
1641
1657
|
|
|
1642
|
-
|
|
1643
|
-
|
|
1658
|
+
# Always point at /instance-icons/, never /static/icons/ — the manifest
|
|
1659
|
+
# itself is public but /static/ is NOT, and a browser fetches manifest
|
|
1660
|
+
# icons without credentials even for a logged-in user. Pointing at
|
|
1661
|
+
# /static/icons/ therefore 401s on every icon and the PWA falls back to
|
|
1662
|
+
# a synthesized initial-letter tile ("P"). serve_instance_icon() already
|
|
1663
|
+
# falls back to the shipped artwork when no instance dir exists, so this
|
|
1664
|
+
# is correct with or without --instance-name.
|
|
1665
|
+
for icon in data.get("icons", []):
|
|
1666
|
+
size = icon["sizes"].split("x")[0]
|
|
1667
|
+
icon["src"] = f"/instance-icons/icon-{size}.png"
|
|
1668
|
+
for shortcut in data.get("shortcuts", []):
|
|
1669
|
+
for icon in shortcut.get("icons", []):
|
|
1644
1670
|
size = icon["sizes"].split("x")[0]
|
|
1645
1671
|
icon["src"] = f"/instance-icons/icon-{size}.png"
|
|
1646
1672
|
|
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain">
|
|
8
8
|
<meta name="theme-color" content="#0d1117">
|
|
9
9
|
<title>Sign in · pAInapple Code</title>
|
|
10
|
+
<!-- /instance-icons/, not /static/icons/ — this page is served pre-auth
|
|
11
|
+
and /static/ is not allowlisted. Without these the browser falls
|
|
12
|
+
back to an implicit /favicon.ico and the tab shows a blank sheet. -->
|
|
13
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/instance-icons/favicon-32.png">
|
|
14
|
+
<link rel="icon" type="image/x-icon" href="/instance-icons/favicon.ico">
|
|
15
|
+
<link rel="apple-touch-icon" href="/instance-icons/apple-touch-icon.png">
|
|
10
16
|
<link rel="stylesheet" href="/static/css/login.css">
|
|
11
17
|
</head>
|
|
12
18
|
<body>
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
<link rel="manifest" href="/manifest.json">
|
|
26
26
|
|
|
27
27
|
<!-- Favicons & Icons -->
|
|
28
|
-
<link rel="icon" type="image/png" sizes="32x32" href="/
|
|
29
|
-
<link rel="icon" type="image/x-icon" href="/
|
|
30
|
-
<link rel="apple-touch-icon" href="/
|
|
31
|
-
<link rel="apple-touch-icon" sizes="152x152" href="/
|
|
32
|
-
<link rel="apple-touch-icon" sizes="180x180" href="/
|
|
33
|
-
<link rel="apple-touch-icon" sizes="167x167" href="/
|
|
28
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/instance-icons/favicon-32.png">
|
|
29
|
+
<link rel="icon" type="image/x-icon" href="/instance-icons/favicon.ico">
|
|
30
|
+
<link rel="apple-touch-icon" href="/instance-icons/apple-touch-icon.png">
|
|
31
|
+
<link rel="apple-touch-icon" sizes="152x152" href="/instance-icons/icon-152.png">
|
|
32
|
+
<link rel="apple-touch-icon" sizes="180x180" href="/instance-icons/icon-180.png">
|
|
33
|
+
<link rel="apple-touch-icon" sizes="167x167" href="/instance-icons/icon-152.png">
|
|
34
34
|
|
|
35
35
|
<!-- External Libraries (vendored via tools/package.json build pipeline) -->
|
|
36
36
|
<!-- Pin marked to v4 for stable API (v5+ has breaking changes) -->
|
{painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code/tools/agents/shadow-git-helper.md
RENAMED
|
@@ -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.
|
|
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
|
{painapple_code-1.1.0 → painapple_code-1.1.2}/src/painapple_code.egg-info/scm_file_list.json
RENAMED
|
@@ -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",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/assets/turn-summary-bar-expanded.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{painapple_code-1.1.0 → painapple_code-1.1.2}/docs-site/getting-started/install-devcontainer.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|