painapple-code 1.0.0__py3-none-any.whl
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/__init__.py +30 -0
- painapple_code/__main__.py +18 -0
- painapple_code/_version.py +24 -0
- painapple_code/auth_middleware.py +930 -0
- painapple_code/cli/__init__.py +204 -0
- painapple_code/cli/deploy/__init__.py +15 -0
- painapple_code/cli/deploy/claude_seed.py +41 -0
- painapple_code/cli/deploy/config.py +260 -0
- painapple_code/cli/deploy/container.py +715 -0
- painapple_code/cli/deploy/launch.py +163 -0
- painapple_code/cli/deploy/runtime.py +223 -0
- painapple_code/cli/lifecycle_cmd.py +443 -0
- painapple_code/cli/list_cmd.py +572 -0
- painapple_code/cli/manage_cmd.py +670 -0
- painapple_code/cli/netinfo.py +125 -0
- painapple_code/cli/profiles.py +390 -0
- painapple_code/cli/serve_args.py +163 -0
- painapple_code/cli/serve_config.py +256 -0
- painapple_code/cli/setup_cmd.py +664 -0
- painapple_code/cli/ui.py +438 -0
- painapple_code/cost_analytics.py +879 -0
- painapple_code/data/models.defaults.yaml +18 -0
- painapple_code/data/models.yaml +18 -0
- painapple_code/data/presets.defaults.json +32 -0
- painapple_code/data/strings.yaml +2269 -0
- painapple_code/helpers.py +406 -0
- painapple_code/paths.py +1514 -0
- painapple_code/prompt_explorer.py +984 -0
- painapple_code/providers/__init__.py +224 -0
- painapple_code/providers/base.py +710 -0
- painapple_code/providers/claude/__init__.py +74 -0
- painapple_code/providers/claude/capabilities.py +218 -0
- painapple_code/providers/claude/errors.py +79 -0
- painapple_code/providers/claude/launch.py +50 -0
- painapple_code/providers/claude/summary.py +89 -0
- painapple_code/providers/claude/translate.py +74 -0
- painapple_code/providers/claude_sdk/__init__.py +139 -0
- painapple_code/providers/claude_sdk/driver.py +412 -0
- painapple_code/providers/codex/__init__.py +87 -0
- painapple_code/providers/codex/capabilities.py +321 -0
- painapple_code/providers/codex/errors.py +70 -0
- painapple_code/providers/codex/launch.py +142 -0
- painapple_code/providers/codex/summary.py +196 -0
- painapple_code/providers/codex/translate.py +204 -0
- painapple_code/providers/codex_app_server/__init__.py +100 -0
- painapple_code/providers/codex_app_server/capabilities.py +41 -0
- painapple_code/providers/codex_app_server/launch.py +202 -0
- painapple_code/providers/codex_app_server/summary.py +291 -0
- painapple_code/providers/codex_app_server/translate.py +263 -0
- painapple_code/providers/codex_app_server/transport.py +238 -0
- painapple_code/routes/__init__.py +0 -0
- painapple_code/routes/api_agents.py +441 -0
- painapple_code/routes/api_app.py +368 -0
- painapple_code/routes/api_app_commit_sections.py +127 -0
- painapple_code/routes/api_app_config.py +997 -0
- painapple_code/routes/api_app_session_prefs.py +217 -0
- painapple_code/routes/api_browser.py +690 -0
- painapple_code/routes/api_commands.py +374 -0
- painapple_code/routes/api_costs.py +128 -0
- painapple_code/routes/api_drafts.py +139 -0
- painapple_code/routes/api_exec.py +149 -0
- painapple_code/routes/api_files.py +542 -0
- painapple_code/routes/api_git.py +657 -0
- painapple_code/routes/api_logs.py +649 -0
- painapple_code/routes/api_plugins.py +275 -0
- painapple_code/routes/api_project_config.py +418 -0
- painapple_code/routes/api_prompts.py +231 -0
- painapple_code/routes/api_providers.py +53 -0
- painapple_code/routes/api_search.py +411 -0
- painapple_code/routes/api_session_stash.py +234 -0
- painapple_code/routes/api_session_welcome.py +151 -0
- painapple_code/routes/api_sessions.py +742 -0
- painapple_code/routes/api_shadow.py +323 -0
- painapple_code/routes/api_shadow_db.py +512 -0
- painapple_code/routes/api_shadow_files.py +332 -0
- painapple_code/routes/api_shadow_search.py +476 -0
- painapple_code/routes/api_skills.py +610 -0
- painapple_code/routes/api_tasks.py +147 -0
- painapple_code/routes/api_terminal.py +540 -0
- painapple_code/routes/api_upload.py +293 -0
- painapple_code/routes/api_viewer.py +229 -0
- painapple_code/routes/dependencies.py +109 -0
- painapple_code/routes/ws_chat.py +837 -0
- painapple_code/server.py +2208 -0
- painapple_code/server_logging.py +263 -0
- painapple_code/services/__init__.py +0 -0
- painapple_code/services/agent_session.py +2738 -0
- painapple_code/session_store.py +253 -0
- painapple_code/session_store_core.py +879 -0
- painapple_code/shadow_db.py +830 -0
- painapple_code/shadow_db_plans.py +369 -0
- painapple_code/shadow_db_queries.py +595 -0
- painapple_code/shadow_db_schema.py +676 -0
- painapple_code/shadow_git.py +1296 -0
- painapple_code/shadow_git_frontmatter.py +314 -0
- painapple_code/shadow_git_sections.py +520 -0
- painapple_code/shadow_git_summary.py +462 -0
- painapple_code/shadow_parser.py +560 -0
- painapple_code/static/css/00-variables.css +276 -0
- painapple_code/static/css/01-base.css +245 -0
- painapple_code/static/css/02-tooltips.css +36 -0
- painapple_code/static/css/09-left-rail.css +448 -0
- painapple_code/static/css/10-header.css +777 -0
- painapple_code/static/css/11-connection-bar.css +120 -0
- painapple_code/static/css/20-messages.css +750 -0
- painapple_code/static/css/21-tool-blocks.css +2340 -0
- painapple_code/static/css/22-edit-diff.css +619 -0
- painapple_code/static/css/23-thinking.css +1584 -0
- painapple_code/static/css/24-background-tasks.css +359 -0
- painapple_code/static/css/25-context-block.css +252 -0
- painapple_code/static/css/26-session-setup.css +144 -0
- painapple_code/static/css/30-markdown.css +854 -0
- painapple_code/static/css/40-input.css +2418 -0
- painapple_code/static/css/41-autocomplete.css +127 -0
- painapple_code/static/css/42-activity-strip.css +97 -0
- painapple_code/static/css/43-file-autocomplete.css +121 -0
- painapple_code/static/css/44-snippets-autocomplete.css +224 -0
- painapple_code/static/css/45-selection-bar.css +433 -0
- painapple_code/static/css/46-keyboard-bar.css +119 -0
- painapple_code/static/css/47-keyboard-longpress.css +116 -0
- painapple_code/static/css/47-token-profile.css +106 -0
- painapple_code/static/css/50-welcome.css +3095 -0
- painapple_code/static/css/51-modals.css +301 -0
- painapple_code/static/css/52-utilities.css +77 -0
- painapple_code/static/css/53-image-upload.css +456 -0
- painapple_code/static/css/54-todo-list.css +102 -0
- painapple_code/static/css/55-file-upload.css +113 -0
- painapple_code/static/css/56-chat-navigator.css +218 -0
- painapple_code/static/css/56-permission-card.css +332 -0
- painapple_code/static/css/56-plan-approval.css +204 -0
- painapple_code/static/css/56-question-form.css +602 -0
- painapple_code/static/css/57-swipe-indicator.css +95 -0
- painapple_code/static/css/58-session-families.css +627 -0
- painapple_code/static/css/59-about.css +196 -0
- painapple_code/static/css/61-log-explorer.css +723 -0
- painapple_code/static/css/62-json-tree.css +489 -0
- painapple_code/static/css/62-skills-widget.css +650 -0
- painapple_code/static/css/63-commands-widget.css +30 -0
- painapple_code/static/css/63-plugins-widget.css +174 -0
- painapple_code/static/css/63-terminal.css +516 -0
- painapple_code/static/css/64-search-files-widget.css +448 -0
- painapple_code/static/css/65-snippets-widget.css +426 -0
- painapple_code/static/css/66-active-sessions.css +979 -0
- painapple_code/static/css/66-agents-widget.css +265 -0
- painapple_code/static/css/66-file-explorer-widget.css +855 -0
- painapple_code/static/css/66-git-panel.css +791 -0
- painapple_code/static/css/66-history-explorer.css +1496 -0
- painapple_code/static/css/67-diff-viewer.css +602 -0
- painapple_code/static/css/67-editor-view.css +748 -0
- painapple_code/static/css/67-file-preview-widget.css +1873 -0
- painapple_code/static/css/68-browser-widget.css +337 -0
- painapple_code/static/css/68-compare-wizard.css +355 -0
- painapple_code/static/css/68-csv-preview.css +106 -0
- painapple_code/static/css/68-diff-preview.css +103 -0
- painapple_code/static/css/68-helpers-install-widget.css +491 -0
- painapple_code/static/css/68-image-annotate.css +346 -0
- painapple_code/static/css/68-terminal-view.css +98 -0
- painapple_code/static/css/68-uploads-widget.css +229 -0
- painapple_code/static/css/69-cost-analytics.css +537 -0
- painapple_code/static/css/70-config-panel.css +3736 -0
- painapple_code/static/css/70-excalidraw.css +136 -0
- painapple_code/static/css/70-prompt-explorer.css +890 -0
- painapple_code/static/css/71-chart.css +111 -0
- painapple_code/static/css/72-discussion-sidebar.css +678 -0
- painapple_code/static/css/74-debug-logs.css +656 -0
- painapple_code/static/css/80-open-dialog.css +146 -0
- painapple_code/static/css/80-quick-switcher.css +383 -0
- painapple_code/static/css/80-widget-system.css +1763 -0
- painapple_code/static/css/81-quick-actions.css +1020 -0
- painapple_code/static/css/82-context-popover.css +1233 -0
- painapple_code/static/css/83-context-menu.css +339 -0
- painapple_code/static/css/85-lazy-loading.css +102 -0
- painapple_code/static/css/86-zen-mode.css +708 -0
- painapple_code/static/css/87-grid-switcher.css +346 -0
- painapple_code/static/css/login.css +198 -0
- painapple_code/static/dist/app.bundle.js +7177 -0
- painapple_code/static/feature-triage.html +446 -0
- painapple_code/static/icons/apple-touch-icon.png +0 -0
- painapple_code/static/icons/favicon-32.png +0 -0
- painapple_code/static/icons/favicon.ico +0 -0
- painapple_code/static/icons/icon-128.png +0 -0
- painapple_code/static/icons/icon-144.png +0 -0
- painapple_code/static/icons/icon-152.png +0 -0
- painapple_code/static/icons/icon-180.png +0 -0
- painapple_code/static/icons/icon-192.png +0 -0
- painapple_code/static/icons/icon-384.png +0 -0
- painapple_code/static/icons/icon-512.png +0 -0
- painapple_code/static/icons/icon-72.png +0 -0
- painapple_code/static/icons/icon-96.png +0 -0
- painapple_code/static/js/action-delegate.js +187 -0
- painapple_code/static/js/activity-strip.js +193 -0
- painapple_code/static/js/app/context-menus.js +619 -0
- painapple_code/static/js/app/file-preview.js +163 -0
- painapple_code/static/js/app/init-ui.js +574 -0
- painapple_code/static/js/app/input-events.js +561 -0
- painapple_code/static/js/app/input-resize.js +313 -0
- painapple_code/static/js/app/message-actions.js +419 -0
- painapple_code/static/js/app/panels.js +210 -0
- painapple_code/static/js/app/rendering-delegators.js +246 -0
- painapple_code/static/js/app/server-loading.js +365 -0
- painapple_code/static/js/app/session-ops.js +287 -0
- painapple_code/static/js/app/session-switch.js +443 -0
- painapple_code/static/js/app/settings-helpers.js +280 -0
- painapple_code/static/js/app/startup-welcome.js +290 -0
- painapple_code/static/js/app-context.js +157 -0
- painapple_code/static/js/app.js +2134 -0
- painapple_code/static/js/auth-fetch.js +46 -0
- painapple_code/static/js/background-tasks.js +274 -0
- painapple_code/static/js/boot.js +73 -0
- painapple_code/static/js/caret-position.js +171 -0
- painapple_code/static/js/chat-navigator.js +710 -0
- painapple_code/static/js/chat-search.js +323 -0
- painapple_code/static/js/command-executor.js +176 -0
- painapple_code/static/js/command-store.js +497 -0
- painapple_code/static/js/components.js +1414 -0
- painapple_code/static/js/config.js +218 -0
- painapple_code/static/js/context-menu.js +740 -0
- painapple_code/static/js/controllers/chat-controller.js +4252 -0
- painapple_code/static/js/controllers/dialog-controller.js +217 -0
- painapple_code/static/js/controllers/tab-controller.js +1828 -0
- painapple_code/static/js/controllers/thinking-controller.js +915 -0
- painapple_code/static/js/diff-utils.js +486 -0
- painapple_code/static/js/drafts-pill.js +95 -0
- painapple_code/static/js/editor-view.js +815 -0
- painapple_code/static/js/effort-settings.js +430 -0
- painapple_code/static/js/feature-triage.js +811 -0
- painapple_code/static/js/file-autocomplete.js +516 -0
- painapple_code/static/js/file-tabs.js +123 -0
- painapple_code/static/js/gestures.js +448 -0
- painapple_code/static/js/grid-switcher.js +334 -0
- painapple_code/static/js/input-handler.js +1472 -0
- painapple_code/static/js/keyboard-bar.js +495 -0
- painapple_code/static/js/layout-switcher.js +109 -0
- painapple_code/static/js/linkify-utils.js +200 -0
- painapple_code/static/js/login.js +141 -0
- painapple_code/static/js/open-dialog.js +879 -0
- painapple_code/static/js/orphan-terminals.js +373 -0
- painapple_code/static/js/path-utils.js +179 -0
- painapple_code/static/js/perf-marks.js +102 -0
- painapple_code/static/js/permission-settings.js +475 -0
- painapple_code/static/js/pointer-input.js +59 -0
- painapple_code/static/js/preview/json-tree-menu.js +226 -0
- painapple_code/static/js/preview/json-tree-toolbar.js +291 -0
- painapple_code/static/js/preview/json-tree.js +457 -0
- painapple_code/static/js/preview/preview-breadcrumb.js +387 -0
- painapple_code/static/js/preview/preview-edit.js +367 -0
- painapple_code/static/js/preview/preview-events.js +361 -0
- painapple_code/static/js/preview/preview-history.js +567 -0
- painapple_code/static/js/preview/preview-inline-edit.js +869 -0
- painapple_code/static/js/preview/preview-poll.js +108 -0
- painapple_code/static/js/preview/preview-render.js +572 -0
- painapple_code/static/js/preview/preview-search.js +421 -0
- painapple_code/static/js/preview/preview-state.js +256 -0
- painapple_code/static/js/preview/preview-utils.js +251 -0
- painapple_code/static/js/preview-plugins/chart-plugin.js +22 -0
- painapple_code/static/js/preview-plugins/csv-plugin.js +188 -0
- painapple_code/static/js/preview-plugins/diff-plugin.js +258 -0
- painapple_code/static/js/preview-plugins/excalidraw-plugin.js +25 -0
- painapple_code/static/js/preview-plugins/html-plugin.js +104 -0
- painapple_code/static/js/preview-plugins/image-plugin.js +20 -0
- painapple_code/static/js/preview-plugins/index.js +34 -0
- painapple_code/static/js/preview-plugins/json-plugin.js +99 -0
- painapple_code/static/js/preview-plugins/jsonl-plugin.js +152 -0
- painapple_code/static/js/preview-plugins/markdown-plugin.js +266 -0
- painapple_code/static/js/preview-plugins/panzoom-plugin.js +63 -0
- painapple_code/static/js/preview-plugins/plugin-helpers.js +282 -0
- painapple_code/static/js/project-color-picker.js +110 -0
- painapple_code/static/js/project-colors.js +163 -0
- painapple_code/static/js/prompt-favorites.js +187 -0
- painapple_code/static/js/quick-actions-menu.js +1736 -0
- painapple_code/static/js/quick-actions-registry.js +1239 -0
- painapple_code/static/js/quick-switcher/controller.js +294 -0
- painapple_code/static/js/quick-switcher/fuzzy-scorer.js +123 -0
- painapple_code/static/js/quick-switcher/index.js +30 -0
- painapple_code/static/js/quick-switcher/providers/base-provider.js +51 -0
- painapple_code/static/js/quick-switcher/providers/command-provider.js +56 -0
- painapple_code/static/js/quick-switcher/providers/file-provider.js +291 -0
- painapple_code/static/js/quick-switcher/providers/panel-provider.js +132 -0
- painapple_code/static/js/quick-switcher/providers/project-provider.js +361 -0
- painapple_code/static/js/quick-switcher/providers/read-files-provider.js +104 -0
- painapple_code/static/js/quick-switcher/providers/skills-provider.js +129 -0
- painapple_code/static/js/quick-switcher/registry.js +69 -0
- painapple_code/static/js/quick-switcher/ui/item.js +54 -0
- painapple_code/static/js/quick-switcher/ui/picker.js +464 -0
- painapple_code/static/js/recent-opens.js +40 -0
- painapple_code/static/js/scroll-manager.js +530 -0
- painapple_code/static/js/scroll-state-machine.js +359 -0
- painapple_code/static/js/selection/action-bar.js +793 -0
- painapple_code/static/js/selection/index.js +15 -0
- painapple_code/static/js/selection/selection-handler.js +877 -0
- painapple_code/static/js/selection/state.js +181 -0
- painapple_code/static/js/session/agent-progress.js +202 -0
- painapple_code/static/js/session/handle-agent-message.js +481 -0
- painapple_code/static/js/session/handle-message.js +550 -0
- painapple_code/static/js/session/interactive.js +587 -0
- painapple_code/static/js/session/message-store.js +271 -0
- painapple_code/static/js/session/messages.js +253 -0
- painapple_code/static/js/session/persistence.js +179 -0
- painapple_code/static/js/session/restore.js +136 -0
- painapple_code/static/js/session/sync.js +333 -0
- painapple_code/static/js/session-container-pool.js +371 -0
- painapple_code/static/js/session-setup-panel.js +274 -0
- painapple_code/static/js/session.js +1047 -0
- painapple_code/static/js/shortcut-hints.js +272 -0
- painapple_code/static/js/shortcuts.js +1146 -0
- painapple_code/static/js/skills-autocomplete.js +262 -0
- painapple_code/static/js/snippets-autocomplete.js +738 -0
- painapple_code/static/js/stash-refs-view.js +83 -0
- painapple_code/static/js/stash-ui.js +768 -0
- painapple_code/static/js/stash.js +785 -0
- painapple_code/static/js/status-bar.js +1184 -0
- painapple_code/static/js/token-profile.js +274 -0
- painapple_code/static/js/tool-renderer-blocks.js +1626 -0
- painapple_code/static/js/tool-renderer-thinking.js +813 -0
- painapple_code/static/js/tool-renderer.js +1500 -0
- painapple_code/static/js/tooltips.js +197 -0
- painapple_code/static/js/upload-manager.js +1019 -0
- painapple_code/static/js/utils.js +521 -0
- painapple_code/static/js/welcome/api.js +363 -0
- painapple_code/static/js/welcome/cards.js +626 -0
- painapple_code/static/js/welcome/context-menu.js +585 -0
- painapple_code/static/js/welcome/families.js +801 -0
- painapple_code/static/js/welcome/preview.js +234 -0
- painapple_code/static/js/welcome/state.js +129 -0
- painapple_code/static/js/welcome.js +1874 -0
- painapple_code/static/js/widget-system/base-widget.js +717 -0
- painapple_code/static/js/widget-system/device-manager.js +178 -0
- painapple_code/static/js/widget-system/event-bus.js +152 -0
- painapple_code/static/js/widget-system/icons.js +120 -0
- painapple_code/static/js/widget-system/index.js +49 -0
- painapple_code/static/js/widget-system/init.js +54 -0
- painapple_code/static/js/widget-system/types/bottom-sheet.js +307 -0
- painapple_code/static/js/widget-system/types/floating.js +915 -0
- painapple_code/static/js/widget-system/types/index.js +40 -0
- painapple_code/static/js/widget-system/types/modal.js +147 -0
- painapple_code/static/js/widget-system/types/sidebar.js +158 -0
- painapple_code/static/js/widget-system/types/tab.js +146 -0
- painapple_code/static/js/widget-system/types/top-sheet.js +203 -0
- painapple_code/static/js/widget-system/widget-manager.js +1187 -0
- painapple_code/static/js/widgets/about-widget.js +260 -0
- painapple_code/static/js/widgets/active-sessions-widget.js +760 -0
- painapple_code/static/js/widgets/agents-widget.js +897 -0
- painapple_code/static/js/widgets/browser-widget.js +579 -0
- painapple_code/static/js/widgets/commands-widget.js +694 -0
- painapple_code/static/js/widgets/config/commit-sections.js +449 -0
- painapple_code/static/js/widgets/config/dir-autocomplete.js +224 -0
- painapple_code/static/js/widgets/config/gestures.js +161 -0
- painapple_code/static/js/widgets/config/models-tab.js +988 -0
- painapple_code/static/js/widgets/config/quick-actions-tab.js +882 -0
- painapple_code/static/js/widgets/config/shortcut-editor.js +587 -0
- painapple_code/static/js/widgets/config/state.js +517 -0
- painapple_code/static/js/widgets/config/system-controls.js +90 -0
- painapple_code/static/js/widgets/config-widget.js +1535 -0
- painapple_code/static/js/widgets/cost-analytics-widget.js +621 -0
- painapple_code/static/js/widgets/debug-widget.js +693 -0
- painapple_code/static/js/widgets/diff-viewer-widget.js +1420 -0
- painapple_code/static/js/widgets/discussion-widget.js +1107 -0
- painapple_code/static/js/widgets/file-explorer-widget.js +2166 -0
- painapple_code/static/js/widgets/file-preview-widget.js +861 -0
- painapple_code/static/js/widgets/git-widget.js +794 -0
- painapple_code/static/js/widgets/helpers-install-widget.js +720 -0
- painapple_code/static/js/widgets/history-explorer-widget.js +1804 -0
- painapple_code/static/js/widgets/image-annotate-widget.js +951 -0
- painapple_code/static/js/widgets/image-preview-widget.js +692 -0
- painapple_code/static/js/widgets/index.js +176 -0
- painapple_code/static/js/widgets/log-explorer-widget.js +1057 -0
- painapple_code/static/js/widgets/plugins-widget.js +305 -0
- painapple_code/static/js/widgets/prompt-explorer-widget.js +1119 -0
- painapple_code/static/js/widgets/search-files-widget.js +529 -0
- painapple_code/static/js/widgets/skills-widget.js +843 -0
- painapple_code/static/js/widgets/snippets-widget.js +479 -0
- painapple_code/static/js/widgets/sub-agents-widget.js +333 -0
- painapple_code/static/js/widgets/tasks-widget.js +379 -0
- painapple_code/static/js/widgets/terminal/connection.js +283 -0
- painapple_code/static/js/widgets/terminal/gestures.js +357 -0
- painapple_code/static/js/widgets/terminal/init.js +642 -0
- painapple_code/static/js/widgets/terminal/link-providers.js +532 -0
- painapple_code/static/js/widgets/terminal/osc52.js +213 -0
- painapple_code/static/js/widgets/terminal/render.js +159 -0
- painapple_code/static/js/widgets/terminal/size.js +54 -0
- painapple_code/static/js/widgets/terminal/state.js +211 -0
- painapple_code/static/js/widgets/terminal/wrap-utils.js +101 -0
- painapple_code/static/js/widgets/terminal-widget.js +793 -0
- painapple_code/static/js/widgets/uploads-widget.js +461 -0
- painapple_code/static/js/widgets/zen-widget.js +1001 -0
- painapple_code/static/login.html +51 -0
- painapple_code/static/manifest.json +73 -0
- painapple_code/static/sw.js +293 -0
- painapple_code/static/vendor/LICENSES.txt +769 -0
- painapple_code/static/vendor/README.md +103 -0
- painapple_code/static/vendor/codemirror.js +35 -0
- painapple_code/static/vendor/codemirror.js.LEGAL.txt +304 -0
- painapple_code/static/vendor/github-markdown-dark.min.css +1124 -0
- painapple_code/static/vendor/highlight-github-dark.min.css +10 -0
- painapple_code/static/vendor/highlight-lang-dockerfile.min.js +8 -0
- painapple_code/static/vendor/highlight-lang-nginx.min.js +21 -0
- painapple_code/static/vendor/highlight-lang-properties.min.js +10 -0
- painapple_code/static/vendor/highlight-lang-scala.min.js +28 -0
- painapple_code/static/vendor/highlight.min.js +1213 -0
- painapple_code/static/vendor/marked.min.js +6 -0
- painapple_code/static/vendor/purify.min.js +3 -0
- painapple_code/static/vendor/xterm-addon-fit.js +2 -0
- painapple_code/static/vendor/xterm.css +209 -0
- painapple_code/static/vendor/xterm.js +2 -0
- painapple_code/static/web-client.html +635 -0
- painapple_code/subprocess_registry.py +535 -0
- painapple_code/tls_cert.py +79 -0
- painapple_code/tools/agents/shadow-git-helper.md +400 -0
- painapple_code/tools/excalidraw-to-svg.js +143 -0
- painapple_code/tools/install-helpers.sh +148 -0
- painapple_code/tools/shadow-git +320 -0
- painapple_code/tools/shadow-query +120 -0
- painapple_code/tools/vegalite-to-svg.js +79 -0
- painapple_code/turn_query.py +766 -0
- painapple_code/turn_tracker.py +221 -0
- painapple_code/utils/__init__.py +0 -0
- painapple_code/utils/agent_cli.py +306 -0
- painapple_code/utils/chart.py +103 -0
- painapple_code/utils/excalidraw.py +107 -0
- painapple_code/utils/file_lock.py +162 -0
- painapple_code/utils/file_paths.py +648 -0
- painapple_code/utils/generate_icons.py +251 -0
- painapple_code/utils/proc.py +205 -0
- painapple_code/utils/pty_backend.py +59 -0
- painapple_code/utils/pty_posix.py +160 -0
- painapple_code/utils/pty_windows.py +245 -0
- painapple_code/utils/token_profiles.py +91 -0
- painapple_code/viewer_templates.py +657 -0
- painapple_code/welcome_search.py +879 -0
- painapple_code-1.0.0.dist-info/METADATA +292 -0
- painapple_code-1.0.0.dist-info/RECORD +436 -0
- painapple_code-1.0.0.dist-info/WHEEL +5 -0
- painapple_code-1.0.0.dist-info/entry_points.txt +2 -0
- painapple_code-1.0.0.dist-info/licenses/LICENSE +661 -0
- painapple_code-1.0.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +261 -0
- painapple_code-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
painapple-code redistributes the third-party components listed below. Each is
|
|
4
|
+
the property of its respective copyright holders and is provided under the
|
|
5
|
+
license noted. Full texts of the common licenses are reproduced in the
|
|
6
|
+
[License texts](#license-texts) appendix; longer licenses (Apache-2.0,
|
|
7
|
+
MPL-2.0, PSF) are referenced by their canonical URL.
|
|
8
|
+
|
|
9
|
+
This file is generated/maintained as part of the release process and shipped
|
|
10
|
+
inside the wheel and sdist.
|
|
11
|
+
|
|
12
|
+
The Python table is verified on every release: `.github/workflows/pypi-publish.yml`
|
|
13
|
+
installs the built wheel into a clean environment and runs
|
|
14
|
+
[`tools/check_licenses.py`](tools/check_licenses.py), which fails the build if
|
|
15
|
+
any resolved dependency carries a license outside the allowlist. Regenerate the
|
|
16
|
+
table with `python tools/check_licenses.py --table` from that same clean
|
|
17
|
+
environment — not from a dev virtualenv, which also contains test and docs
|
|
18
|
+
tooling that is never shipped.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Bundled front-end assets
|
|
23
|
+
|
|
24
|
+
Self-hosted under `src/painapple_code/static/vendor/` and served same-origin
|
|
25
|
+
(no CDN). Versions are pinned in `static/vendor/README.md`.
|
|
26
|
+
|
|
27
|
+
| Component | Version | License | Copyright |
|
|
28
|
+
|-----------|---------|---------|-----------|
|
|
29
|
+
| CodeMirror 6 (39 packages — `@codemirror/*`, `@lezer/*`, `style-mod`, `crelt`, `w3c-keyname`, `@marijn/find-cluster-break`) | 6.x | MIT | Marijn Haverbeke and CodeMirror contributors |
|
|
30
|
+
| xterm.js | 5.x | MIT | The xterm.js authors |
|
|
31
|
+
| xterm-addon-fit | 0.8.x | MIT | The xterm.js authors |
|
|
32
|
+
| marked | 4.3.0 | MIT | Christopher Jeffrey and marked contributors |
|
|
33
|
+
| DOMPurify | 3.4.11 | Apache-2.0 OR MPL-2.0 | Dr.-Ing. Mario Heiderich, Cure53 |
|
|
34
|
+
| highlight.js (+ language packs, github-dark theme) | 11.9.0 | BSD-3-Clause | Ivan Sagalaev and highlight.js contributors |
|
|
35
|
+
| github-markdown-css | 5.x | MIT | Sindre Sorhus |
|
|
36
|
+
|
|
37
|
+
`codemirror.js` is a bundle, and bundling discards each package's `LICENSE`
|
|
38
|
+
file. Its per-package copyright notices are therefore reproduced verbatim in
|
|
39
|
+
[`src/painapple_code/static/vendor/codemirror.js.LEGAL.txt`](src/painapple_code/static/vendor/codemirror.js.LEGAL.txt),
|
|
40
|
+
generated at build time by `tools/gen-vendor-legal.mjs` from esbuild's
|
|
41
|
+
`--metafile` (the set of inputs actually bundled, which is why it lists 39
|
|
42
|
+
packages rather than the 20 direct `@codemirror/*` dependencies).
|
|
43
|
+
|
|
44
|
+
The remaining vendored files are copied verbatim out of `node_modules`, which
|
|
45
|
+
loses the per-package `LICENSE` the same way bundling does — and 9 of the 12
|
|
46
|
+
carry no inline copyright banner of their own. Their notices are reproduced in
|
|
47
|
+
[`src/painapple_code/static/vendor/LICENSES.txt`](src/painapple_code/static/vendor/LICENSES.txt),
|
|
48
|
+
generated at build time by `tools/gen-copied-legal.mjs`. Both notice files
|
|
49
|
+
ship inside the wheel alongside the assets they describe.
|
|
50
|
+
|
|
51
|
+
## Node.js render helpers (optional, not redistributed)
|
|
52
|
+
|
|
53
|
+
`src/painapple_code/tools/vegalite-to-svg.js` and `excalidraw-to-svg.js` are
|
|
54
|
+
shipped in the wheel and shell out to Node for chart and diagram rendering.
|
|
55
|
+
The packages they import are **not** bundled or redistributed — they are
|
|
56
|
+
installed separately by the user, and the features degrade gracefully when
|
|
57
|
+
absent. Listed here because the shipped scripts require them.
|
|
58
|
+
|
|
59
|
+
| Package | Version | License |
|
|
60
|
+
|---------|---------|---------|
|
|
61
|
+
| vega | 6.2.0 | BSD-3-Clause |
|
|
62
|
+
| vega-lite | 6.4.2 | BSD-3-Clause |
|
|
63
|
+
| @excalidraw/utils | 0.1.3-test32 | MIT |
|
|
64
|
+
| canvas | 3.2.1 | MIT |
|
|
65
|
+
| jsdom | 28.0.0 | MIT |
|
|
66
|
+
| lz-string | 1.5.0 | MIT |
|
|
67
|
+
|
|
68
|
+
## Python runtime dependencies
|
|
69
|
+
|
|
70
|
+
The full dependency set resolved by a clean install of the wheel — direct
|
|
71
|
+
dependencies from `requirements.txt` plus every transitive dependency. Because
|
|
72
|
+
`requirements.txt` pins lower bounds (`>=`), the exact versions below are a
|
|
73
|
+
snapshot (resolved 2026-08-09); the licenses are what the release gate
|
|
74
|
+
enforces.
|
|
75
|
+
|
|
76
|
+
| Package | Version | License |
|
|
77
|
+
|---------|---------|---------|
|
|
78
|
+
| annotated-doc | 0.0.5 | MIT |
|
|
79
|
+
| annotated-types | 0.8.0 | MIT |
|
|
80
|
+
| anyio | 4.14.2 | MIT |
|
|
81
|
+
| attrs | 26.1.0 | MIT |
|
|
82
|
+
| certifi | 2026.7.22 | MPL-2.0 |
|
|
83
|
+
| cffi | 2.1.1 | MIT-0 |
|
|
84
|
+
| claude-agent-sdk | 0.2.134 | MIT |
|
|
85
|
+
| click | 8.4.2 | BSD-3-Clause |
|
|
86
|
+
| cryptography | 50.0.0 | Apache-2.0 OR BSD-3-Clause |
|
|
87
|
+
| duckdb | 1.5.5 | MIT |
|
|
88
|
+
| fastapi | 0.141.1 | MIT |
|
|
89
|
+
| h11 | 0.16.0 | MIT |
|
|
90
|
+
| httpcore | 1.0.9 | BSD-3-Clause |
|
|
91
|
+
| httptools | 0.8.0 | MIT |
|
|
92
|
+
| httpx | 0.28.1 | BSD-3-Clause |
|
|
93
|
+
| httpx-sse | 0.4.3 | MIT |
|
|
94
|
+
| idna | 3.18 | BSD-3-Clause |
|
|
95
|
+
| jsonschema | 4.26.0 | MIT |
|
|
96
|
+
| jsonschema-specifications | 2025.9.1 | MIT |
|
|
97
|
+
| mcp | 1.29.0 | MIT |
|
|
98
|
+
| pillow | 12.3.0 | MIT-CMU |
|
|
99
|
+
| prompt_toolkit | 3.0.53 | BSD-3-Clause |
|
|
100
|
+
| pycparser | 3.0 | BSD-3-Clause |
|
|
101
|
+
| pydantic | 2.13.4 | MIT |
|
|
102
|
+
| pydantic-settings | 2.15.0 | MIT |
|
|
103
|
+
| pydantic_core | 2.46.4 | MIT |
|
|
104
|
+
| PyJWT | 2.13.0 | MIT |
|
|
105
|
+
| python-dotenv | 1.2.2 | BSD-3-Clause |
|
|
106
|
+
| python-multipart | 0.0.32 | Apache-2.0 |
|
|
107
|
+
| pytz | 2026.3.post1 | MIT |
|
|
108
|
+
| PyYAML | 6.0.3 | MIT |
|
|
109
|
+
| questionary | 2.1.1 | MIT |
|
|
110
|
+
| referencing | 0.37.0 | MIT |
|
|
111
|
+
| rpds-py | 2026.6.3 | MIT |
|
|
112
|
+
| sniffio | 1.3.1 | MIT |
|
|
113
|
+
| sse-starlette | 3.4.8 | BSD-3-Clause |
|
|
114
|
+
| starlette | 1.6.0 | BSD-3-Clause |
|
|
115
|
+
| typing-inspection | 0.4.2 | MIT |
|
|
116
|
+
| typing_extensions | 4.16.0 | PSF-2.0 |
|
|
117
|
+
| uvicorn | 0.52.1 | BSD-3-Clause |
|
|
118
|
+
| uvloop | 0.22.1 | Apache-2.0 |
|
|
119
|
+
| watchfiles | 1.2.0 | MIT |
|
|
120
|
+
| wcwidth | 0.8.2 | MIT |
|
|
121
|
+
| websockets | 17.0.1 | BSD-3-Clause |
|
|
122
|
+
|
|
123
|
+
## Agent CLIs the server drives
|
|
124
|
+
|
|
125
|
+
painapple-code drives an agent CLI as a subprocess; it does not link against
|
|
126
|
+
one. Whether that CLI is redistributed depends on **which artifact** you took,
|
|
127
|
+
and the two differ:
|
|
128
|
+
|
|
129
|
+
| Artifact | Contains an agent CLI? |
|
|
130
|
+
|----------|------------------------|
|
|
131
|
+
| PyPI wheel / sdist (`pip install painapple-code`) | **No.** The user installs Claude Code, Codex, or another CLI separately, under that vendor's own terms. |
|
|
132
|
+
| Container image (`wrotek/painapple-code`) | **No.** `docker-entrypoint.sh` installs them from npm on first boot, into the user's own `/data` volume. |
|
|
133
|
+
|
|
134
|
+
Neither artifact redistributes an agent CLI. The image did bundle
|
|
135
|
+
`@anthropic-ai/claude-code` up to and including `v1.0.0-rc16`; it no longer
|
|
136
|
+
does, because that would have been redistribution of proprietary software
|
|
137
|
+
without a written grant (see below). The first container start now runs
|
|
138
|
+
`npm install -g` for `@anthropic-ai/claude-code@2` and `@openai/codex@latest`,
|
|
139
|
+
which makes the download the user's own — the same act as `npm i -g` on a
|
|
140
|
+
host, under the same terms. `PAINAPPLE_SKIP_AGENT_CLI=1` disables it, and
|
|
141
|
+
`PAINAPPLE_AGENT_CLIS` overrides the set.
|
|
142
|
+
|
|
143
|
+
`@openai/codex` is **Apache-2.0** ([openai/codex](https://github.com/openai/codex)),
|
|
144
|
+
so bundling it would have been permitted. It goes through the same first-run
|
|
145
|
+
install anyway, to keep one mechanism rather than two.
|
|
146
|
+
|
|
147
|
+
`@anthropic-ai/claude-code` is **proprietary software, not open source**: its
|
|
148
|
+
`LICENSE.md` reads "© Anthropic PBC. All rights reserved," and use is governed
|
|
149
|
+
by Anthropic's [Commercial Terms](https://www.anthropic.com/legal/commercial-terms)
|
|
150
|
+
or [Consumer Terms of Service](https://www.anthropic.com/legal/consumer-terms)
|
|
151
|
+
depending on the plan, plus the [Usage Policy](https://www.anthropic.com/legal/aup).
|
|
152
|
+
It is **not** licensed under this project's AGPL, and this project claims no
|
|
153
|
+
rights in it — running it requires the user's own Anthropic account and their
|
|
154
|
+
own acceptance of those terms.
|
|
155
|
+
|
|
156
|
+
Note that Anthropic's terms distinguish ordinary personal use from operating a
|
|
157
|
+
service for others: OAuth/subscription credentials are intended for the
|
|
158
|
+
plan-holder's own use, while developers offering a product to third parties are
|
|
159
|
+
directed to API-key authentication. painapple-code is self-hosted and
|
|
160
|
+
single-tenant by design — you run it against your own account — but if you
|
|
161
|
+
expose an instance to other people, that distinction is yours to honour. See
|
|
162
|
+
[`SECURITY.md`](SECURITY.md) for the single-user threat model.
|
|
163
|
+
|
|
164
|
+
## Container image
|
|
165
|
+
|
|
166
|
+
The published container image is a separate distribution artifact from the
|
|
167
|
+
Python package, and carries considerably more third-party software than the
|
|
168
|
+
wheel does. It is built `FROM
|
|
169
|
+
docker.io/library/python:3.13-slim-bookworm` and installs Node.js 20 plus a set
|
|
170
|
+
of Debian packages for the in-container terminal (editors, `ripgrep`, `fd`,
|
|
171
|
+
`jq`, `git`, `tmux`, and similar). Those components remain under their own
|
|
172
|
+
upstream licenses — predominantly GPL, LGPL, MIT, and BSD as shipped by Debian
|
|
173
|
+
and NodeSource — and are neither modified nor relicensed by this project. Run
|
|
174
|
+
`dpkg-query -W -f='${Package} ${Version}\n'` inside the image for the exact
|
|
175
|
+
manifest of a given tag.
|
|
176
|
+
|
|
177
|
+
The image's `org.opencontainers.image.licenses` label (`AGPL-3.0-or-later`)
|
|
178
|
+
describes painapple-code's own source, not the aggregate of everything the
|
|
179
|
+
image contains.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## License texts
|
|
184
|
+
|
|
185
|
+
### MIT License
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
189
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
190
|
+
in the Software without restriction, including without limitation the rights
|
|
191
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
192
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
193
|
+
furnished to do so, subject to the following conditions:
|
|
194
|
+
|
|
195
|
+
The above copyright notice and this permission notice shall be included in all
|
|
196
|
+
copies or substantial portions of the Software.
|
|
197
|
+
|
|
198
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
199
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
200
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
201
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
202
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
203
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
204
|
+
SOFTWARE.
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### MIT No Attribution (MIT-0)
|
|
208
|
+
|
|
209
|
+
Used by cffi. Identical to the MIT license above minus the requirement to
|
|
210
|
+
reproduce the copyright notice — strictly more permissive. Full text:
|
|
211
|
+
<https://spdx.org/licenses/MIT-0.html>.
|
|
212
|
+
|
|
213
|
+
### BSD 3-Clause License
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
Redistribution and use in source and binary forms, with or without
|
|
217
|
+
modification, are permitted provided that the following conditions are met:
|
|
218
|
+
|
|
219
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
220
|
+
list of conditions and the following disclaimer.
|
|
221
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
222
|
+
this list of conditions and the following disclaimer in the documentation
|
|
223
|
+
and/or other materials provided with the distribution.
|
|
224
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
|
225
|
+
may be used to endorse or promote products derived from this software
|
|
226
|
+
without specific prior written permission.
|
|
227
|
+
|
|
228
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
229
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
230
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
231
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
232
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
233
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
234
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
235
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
236
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
237
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### MIT-CMU / HPND (Pillow)
|
|
241
|
+
|
|
242
|
+
Pillow is released under the historical PIL Software License (an
|
|
243
|
+
HPND/MIT-CMU-style permissive license). Full text:
|
|
244
|
+
<https://github.com/python-pillow/Pillow/blob/main/LICENSE>.
|
|
245
|
+
|
|
246
|
+
### Apache License 2.0
|
|
247
|
+
|
|
248
|
+
Used by python-multipart, DOMPurify (dual with MPL-2.0), and cryptography
|
|
249
|
+
(dual with BSD-3-Clause). Full text: <https://www.apache.org/licenses/LICENSE-2.0>.
|
|
250
|
+
Per §4(d), any NOTICE files shipped by these projects are preserved in their
|
|
251
|
+
respective vendored/installed distributions.
|
|
252
|
+
|
|
253
|
+
### Mozilla Public License 2.0
|
|
254
|
+
|
|
255
|
+
Used by certifi and available as one option for DOMPurify. Full text:
|
|
256
|
+
<https://www.mozilla.org/en-US/MPL/2.0/>.
|
|
257
|
+
|
|
258
|
+
### Python Software Foundation License 2.0
|
|
259
|
+
|
|
260
|
+
Used by typing_extensions. Full text:
|
|
261
|
+
<https://docs.python.org/3/license.html>.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
painapple_code
|