opalacoder 0.2.3.4__tar.gz → 0.2.4__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.
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/PKG-INFO +1 -1
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/App.jsx +36 -3
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/modals/EditProjectModal.jsx +1 -1
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/hooks/useTerminal.js +22 -1
- opalacoder-0.2.3.4/opalacoder/gui/assets/index-Dzeshe78.js → opalacoder-0.2.4/opalacoder/gui/assets/index-CiJtgyqm.js +14 -14
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/gui/index.html +1 -1
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/terminal_manager.py +1 -1
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/pyproject.toml +1 -1
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/.claude/rules/RULES.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/.claude/settings.json +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/.github/workflows/publish.yml +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/.gitignore +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AGENTS.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/100.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/102.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/1024.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/108.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/114.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/120.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/128.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/144.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/152.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/16.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/167.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/172.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/180.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/196.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/20.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/216.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/234.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/256.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/258.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/29.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/32.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/40.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/48.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/50.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/512.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/55.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/57.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/58.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/60.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/64.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/66.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/72.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/76.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/80.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/87.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/88.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/92.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/android/mipmap-hdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/android/mipmap-mdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/android/mipmap-xhdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/appstore.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/icon.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/opalaicon.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/AppIcons/playstore.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/CLAUDE.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/GEMINI.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/README.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/agents.yaml +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/config.yaml +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/debug/debug_litellm_callbacks.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/debug/scratch_tail.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/debug/test_thought_stream.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/guide/analysis_results.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/guide/figs/logotipo.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/guide/paper_memplan.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/guide/skills-plugin-system.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/01-arquitetura.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/02-memgpt-orquestrador.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/03-skill-implement-feature.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/04-memoria.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/05-vcs-sombra.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/06-skills-e-plugins.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/07-configuracao.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/08-ide.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/09-ide-projectcreationinterface.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/10-chat-meta-params.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/README.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/docs/specs/backlog_register.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/index.html +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/package-lock.json +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/package.json +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/ActivityBar.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/BottomPanel.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/ChatPanel.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/ContextMenu.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/EditorPanel.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/ExplorerSidebar.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/FileNode.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/GitSidebar.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/StatusBar.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/TextContextMenu.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/modals/ConfirmModal.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/modals/DirPickerModal.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/modals/InstallDepsPrompt.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/modals/NewProjectModal.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/components/modals/SettingsModal.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/hooks/useResizing.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/hooks/useTextContextMenu.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/index.css +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/main.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/utils/formatMessage.jsx +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/utils/language.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/src/utils/storage.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/gui_src/vite.config.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/icon.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/main.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/__init__.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/agent_stdin.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/agents.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/api_keys.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/archival.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore/modelconfigs/gpt_oss__latest.metadata +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore/modelconfigs/gpt_oss__latest.zip +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore/skills/skill_html_css_js.metadata +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore/skills/skill_html_css_js.zip +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore/skills/skill_implement_feature.metadata +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore/skills/skill_implement_feature.zip +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/assetstore.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/chat_meta_params.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/cli.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/cli_commands.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/code_index.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/config.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/embeddings.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/gui/assets/index-CD7_Sjss.css +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/gui/assets/vendor-monaco-BkbU5OES.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/gui/assets/vendor-react-B2vUwPEE.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/gui/assets/vendor-xterm-3VOAfa_q.js +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/i18n.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/icon.png +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/ide_server.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/memgpt_runtime.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/orchestrator.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/planner.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/plugins/__init__.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/plugins/html_css_js_tools.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/project.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/session.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/skills.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/structured.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/terminal.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/tools.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/vcs.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/vector_index.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/web_search_config.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/workflow_orchestrator.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/opalacoder/workflow_tools.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/pytest.ini +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/requirements.txt +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/chat-orchestrator/SKILL.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/command-line/SKILL.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/command-line/scripts/command_executor.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/skills_store/html-css-js/SKILL.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/skills_store/html-css-js/scripts/check_contracts.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/skills_store/implement-feature/SKILL.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/skills_store/implement-feature/scripts/run_workflow.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/view-editor/SKILL.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/view-editor/scripts/run_view_editor.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills/web-search/SKILL.md +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/skills.yaml +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_agent_config.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_agent_stdin.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_chat_meta_params.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_code_index_integration.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_command_line_skill.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_complexity_evaluator.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_context_guard.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_file_delete.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_i18n_coverage.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_implement_feature_script.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_memgpt_runtime.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_model_commands.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_planner_oracle_live.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_planner_output.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_project_store.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_refinement_loop.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_search_bugs.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_skills_directory_loader.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_unhashable_dict_bug.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_verification_strategies.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_view_editor_skill.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_web_search.py +0 -0
- {opalacoder-0.2.3.4 → opalacoder-0.2.4}/tests/test_workflow_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opalacoder
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Autonomous coding agent with interactive planning and modular execution
|
|
5
5
|
Project-URL: Homepage, https://github.com/gilzamir/OpalaCoder
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/gilzamir/OpalaCoder/issues
|
|
@@ -220,7 +220,18 @@ export default function App() {
|
|
|
220
220
|
|
|
221
221
|
// ── Helpers ───────────────────────────────────────────────────────────────
|
|
222
222
|
const addLog = (type, message) =>
|
|
223
|
-
setTerminalLogs(prev =>
|
|
223
|
+
setTerminalLogs(prev => {
|
|
224
|
+
if (prev.length > 0) {
|
|
225
|
+
const last = prev[prev.length - 1];
|
|
226
|
+
if (last.type === type && (type === 'thought' || type === 'stdout' || type === 'stderr')) {
|
|
227
|
+
return [
|
|
228
|
+
...prev.slice(0, -1),
|
|
229
|
+
{ ...last, message: last.message + message }
|
|
230
|
+
];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return [...prev, { type, message, timestamp: new Date().toLocaleTimeString() }];
|
|
234
|
+
});
|
|
224
235
|
|
|
225
236
|
// ── API calls ─────────────────────────────────────────────────────────────
|
|
226
237
|
const fetchProjects = async () => {
|
|
@@ -559,8 +570,30 @@ export default function App() {
|
|
|
559
570
|
switch (event) {
|
|
560
571
|
case 'server_ready': addLog('info', 'Agente pronto.'); break;
|
|
561
572
|
case 'agent_started': addLog('info', `Agente ${data.agent} iniciado.`); break;
|
|
562
|
-
case 'thought':
|
|
563
|
-
|
|
573
|
+
case 'thought':
|
|
574
|
+
addLog('thought', data.content);
|
|
575
|
+
setThinkingLogs(prev => {
|
|
576
|
+
if (prev.length > 0) {
|
|
577
|
+
const last = prev[prev.length - 1];
|
|
578
|
+
if (last.type === 'THINKING') {
|
|
579
|
+
return [...prev.slice(0, -1), { ...last, content: last.content + data.content }];
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return [...prev, { timestamp: new Date().toLocaleTimeString(), type: 'THINKING', content: data.content }];
|
|
583
|
+
});
|
|
584
|
+
break;
|
|
585
|
+
case 'reflection':
|
|
586
|
+
addLog('thought', data.content);
|
|
587
|
+
setThinkingLogs(prev => {
|
|
588
|
+
if (prev.length > 0) {
|
|
589
|
+
const last = prev[prev.length - 1];
|
|
590
|
+
if (last.type === 'REFLECTION') {
|
|
591
|
+
return [...prev.slice(0, -1), { ...last, content: last.content + data.content }];
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
return [...prev, { timestamp: new Date().toLocaleTimeString(), type: 'REFLECTION', content: data.content }];
|
|
595
|
+
});
|
|
596
|
+
break;
|
|
564
597
|
case 'cancelled': addLog('warning', data.message || 'Execução cancelada.'); setChatMessages(prev => [...prev, { role: 'assistant', content: `⚠️ Interrompido: ${data.message || 'A execução do agente foi parada.'}` }]); break;
|
|
565
598
|
case 'tool_call': addLog('tool_call', `Chamando: ${data.tool} (${JSON.stringify(data.arguments)})`); break;
|
|
566
599
|
case 'tool_result': addLog('tool_result', `Sucesso: ${data.tool}`); break;
|
|
@@ -298,7 +298,7 @@ export default function EditProjectModal({
|
|
|
298
298
|
<div className="flex flex-col" style={{ gap: '4px' }}>
|
|
299
299
|
<label className="vscode-sidebar-section-title" style={{ padding: 0 }}>Response Mode (MemGPT)</label>
|
|
300
300
|
<select
|
|
301
|
-
value={editingProject.model_params?.response_mode ?? '
|
|
301
|
+
value={editingProject.model_params?.response_mode ?? 'last'}
|
|
302
302
|
onChange={e => setEditingProject(p => ({ ...p, model_params: { ...p.model_params, response_mode: e.target.value } }))}
|
|
303
303
|
style={{ backgroundColor: '#3c3c3c', color: '#cccccc', border: '1px solid #555', borderRadius: '3px', padding: '4px 6px', fontSize: '12px' }}
|
|
304
304
|
>
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { Terminal as XTerm } from '@xterm/xterm';
|
|
3
3
|
import { FitAddon } from '@xterm/addon-fit';
|
|
4
4
|
|
|
5
5
|
// Hook that initialises an xterm.js terminal and connects it to the backend SSE stream.
|
|
6
6
|
export function useTerminal({ activeProject, terminalRef, terminalInstanceRef, fitAddonRef, eventSourceRef, activeBottomTab, bottomPanelHeight }) {
|
|
7
|
+
// Tracks whether the terminal has been made visible at least once after creation.
|
|
8
|
+
// Used to send a Ctrl+L redraw on first focus so the shell prompt appears correctly.
|
|
9
|
+
const promptDrawnRef = useRef(false);
|
|
10
|
+
|
|
7
11
|
// Initialise / tear-down terminal when the active project changes.
|
|
8
12
|
useEffect(() => {
|
|
9
13
|
if (!activeProject) {
|
|
@@ -16,6 +20,9 @@ export function useTerminal({ activeProject, terminalRef, terminalInstanceRef, f
|
|
|
16
20
|
|
|
17
21
|
if (!terminalRef.current) return;
|
|
18
22
|
|
|
23
|
+
// Reset the prompt-drawn flag whenever the terminal is (re)created.
|
|
24
|
+
promptDrawnRef.current = false;
|
|
25
|
+
|
|
19
26
|
const term = new XTerm({
|
|
20
27
|
cursorBlink: true,
|
|
21
28
|
fontSize: 13,
|
|
@@ -103,7 +110,21 @@ export function useTerminal({ activeProject, terminalRef, terminalInstanceRef, f
|
|
|
103
110
|
headers: { 'Content-Type': 'application/json' },
|
|
104
111
|
body: JSON.stringify({ action: 'resize', cols, rows, projectPath: activeProject.project_path }),
|
|
105
112
|
}).catch(err => console.error('Failed to send terminal resize', err));
|
|
113
|
+
|
|
106
114
|
terminalInstanceRef.current.focus();
|
|
115
|
+
|
|
116
|
+
// On the first time the terminal becomes visible, the shell may not have
|
|
117
|
+
// redrawn its prompt after the initial resize (the tab was hidden during
|
|
118
|
+
// creation so xterm.js had no valid dimensions). Sending Ctrl+L forces
|
|
119
|
+
// bash/zsh to redraw the prompt without executing any command.
|
|
120
|
+
if (!promptDrawnRef.current) {
|
|
121
|
+
promptDrawnRef.current = true;
|
|
122
|
+
fetch('/api/terminal/input', {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers: { 'Content-Type': 'application/json' },
|
|
125
|
+
body: JSON.stringify({ action: 'input', text: '\x0c', projectPath: activeProject.project_path }),
|
|
126
|
+
}).catch(err => console.error('Failed to send prompt redraw', err));
|
|
127
|
+
}
|
|
107
128
|
} catch (e) { /* ignore */ }
|
|
108
129
|
}, 50);
|
|
109
130
|
}
|