vibesurf 0.1.13__tar.gz → 0.1.15__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.

Potentially problematic release.


This version of vibesurf might be problematic. Click here for more details.

Files changed (112) hide show
  1. {vibesurf-0.1.13 → vibesurf-0.1.15}/.github/workflows/publish.yml +1 -32
  2. {vibesurf-0.1.13 → vibesurf-0.1.15}/PKG-INFO +1 -1
  3. {vibesurf-0.1.13 → vibesurf-0.1.15}/tests/test_agents.py +15 -5
  4. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/_version.py +3 -3
  5. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/browser_use_agent.py +4 -4
  6. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/prompts/vibe_surf_prompt.py +1 -1
  7. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/vibe_surf_agent.py +2 -1
  8. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/task.py +8 -4
  9. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/llm/openai_compatible.py +5 -4
  10. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/vibesurf_tools.py +4 -2
  11. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.egg-info/PKG-INFO +1 -1
  12. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.spec +2 -6
  13. {vibesurf-0.1.13 → vibesurf-0.1.15}/.env.example +0 -0
  14. {vibesurf-0.1.13 → vibesurf-0.1.15}/.gitignore +0 -0
  15. {vibesurf-0.1.13 → vibesurf-0.1.15}/.python-version +0 -0
  16. {vibesurf-0.1.13 → vibesurf-0.1.15}/LICENSE +0 -0
  17. {vibesurf-0.1.13 → vibesurf-0.1.15}/MANIFEST.in +0 -0
  18. {vibesurf-0.1.13 → vibesurf-0.1.15}/README.md +0 -0
  19. {vibesurf-0.1.13 → vibesurf-0.1.15}/docs/EXECUTABLE_BUILD.md +0 -0
  20. {vibesurf-0.1.13 → vibesurf-0.1.15}/docs/PYPI_SETUP.md +0 -0
  21. {vibesurf-0.1.13 → vibesurf-0.1.15}/pyproject.toml +0 -0
  22. {vibesurf-0.1.13 → vibesurf-0.1.15}/scripts/build-local.bat +0 -0
  23. {vibesurf-0.1.13 → vibesurf-0.1.15}/scripts/build-local.sh +0 -0
  24. {vibesurf-0.1.13 → vibesurf-0.1.15}/setup.cfg +0 -0
  25. {vibesurf-0.1.13 → vibesurf-0.1.15}/tests/test_backend_api.py +0 -0
  26. {vibesurf-0.1.13 → vibesurf-0.1.15}/tests/test_browser.py +0 -0
  27. {vibesurf-0.1.13 → vibesurf-0.1.15}/tests/test_tools.py +0 -0
  28. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/__init__.py +0 -0
  29. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/__init__.py +0 -0
  30. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/prompts/__init__.py +0 -0
  31. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/prompts/report_writer_prompt.py +0 -0
  32. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/report_writer_agent.py +0 -0
  33. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/agents/views.py +0 -0
  34. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/__init__.py +0 -0
  35. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/__init__.py +0 -0
  36. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/activity.py +0 -0
  37. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/browser.py +0 -0
  38. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/config.py +0 -0
  39. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/files.py +0 -0
  40. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/api/models.py +0 -0
  41. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/database/__init__.py +0 -0
  42. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/database/manager.py +0 -0
  43. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/database/models.py +0 -0
  44. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/database/queries.py +0 -0
  45. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/database/schemas.py +0 -0
  46. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/llm_config.py +0 -0
  47. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/main.py +0 -0
  48. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/migrations/__init__.py +0 -0
  49. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/migrations/init_db.py +0 -0
  50. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/migrations/seed_data.py +0 -0
  51. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/shared_state.py +0 -0
  52. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/utils/__init__.py +0 -0
  53. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/utils/encryption.py +0 -0
  54. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/backend/utils/llm_factory.py +0 -0
  55. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/__init__.py +0 -0
  56. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/agen_browser_profile.py +0 -0
  57. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/agent_browser_session.py +0 -0
  58. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/browser_manager.py +0 -0
  59. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/utils.py +0 -0
  60. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/watchdogs/__init__.py +0 -0
  61. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
  62. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -0
  63. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/background.js +0 -0
  64. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/config.js +0 -0
  65. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/content.js +0 -0
  66. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/dev-reload.js +0 -0
  67. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/icons/convert-svg.js +0 -0
  68. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/icons/logo-preview.html +0 -0
  69. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/icons/logo.icns +0 -0
  70. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/icons/logo.png +0 -0
  71. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/manifest.json +0 -0
  72. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/popup.html +0 -0
  73. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/api-client.js +0 -0
  74. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/file-manager.js +0 -0
  75. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/history-manager.js +0 -0
  76. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/main.js +0 -0
  77. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
  78. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/modal-manager.js +0 -0
  79. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/session-manager.js +0 -0
  80. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/settings-manager.js +0 -0
  81. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/scripts/ui-manager.js +0 -0
  82. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/sidepanel.html +0 -0
  83. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/activity.css +0 -0
  84. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/animations.css +0 -0
  85. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/base.css +0 -0
  86. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/components.css +0 -0
  87. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/history-modal.css +0 -0
  88. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/input.css +0 -0
  89. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/layout.css +0 -0
  90. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/responsive.css +0 -0
  91. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/settings-environment.css +0 -0
  92. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/settings-forms.css +0 -0
  93. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/settings-modal.css +0 -0
  94. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/settings-profiles.css +0 -0
  95. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/settings-responsive.css +0 -0
  96. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/settings-utilities.css +0 -0
  97. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/chrome_extension/styles/variables.css +0 -0
  98. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/cli.py +0 -0
  99. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/common.py +0 -0
  100. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/llm/__init__.py +0 -0
  101. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/logger.py +0 -0
  102. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/__init__.py +0 -0
  103. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/browser_use_tools.py +0 -0
  104. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/file_system.py +0 -0
  105. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/mcp_client.py +0 -0
  106. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/report_writer_tools.py +0 -0
  107. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibe_surf/tools/views.py +1 -1
  108. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.egg-info/SOURCES.txt +0 -0
  109. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.egg-info/dependency_links.txt +0 -0
  110. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.egg-info/entry_points.txt +0 -0
  111. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.egg-info/requires.txt +0 -0
  112. {vibesurf-0.1.13 → vibesurf-0.1.15}/vibesurf.egg-info/top_level.txt +0 -0
@@ -85,14 +85,6 @@ jobs:
85
85
  - os: windows-latest
86
86
  asset_name: vibesurf-windows-x64.exe
87
87
  activate_cmd: .venv\Scripts\activate.bat
88
- # macOS Intel (x86_64) - compatible with Apple Silicon via Rosetta 2
89
- - os: macos-13
90
- asset_name: vibesurf-macos-intel-x64
91
- activate_cmd: source .venv/bin/activate
92
- # macOS Apple Silicon (arm64) - native performance
93
- - os: macos-14
94
- asset_name: vibesurf-macos-apple-silicon
95
- activate_cmd: source .venv/bin/activate
96
88
 
97
89
  runs-on: ${{ matrix.os }}
98
90
 
@@ -163,24 +155,6 @@ jobs:
163
155
  if [[ "$RUNNER_OS" == "Windows" ]]; then
164
156
  # Windows: rename .exe file
165
157
  mv dist/vibesurf.exe dist/${{ matrix.asset_name }}
166
- elif [[ "$RUNNER_OS" == "macOS" ]]; then
167
- # macOS: handle single executable (CLI application with console support)
168
- echo "Processing macOS CLI executable with icon..."
169
- mv dist/vibesurf dist/${{ matrix.asset_name }}
170
- chmod +x dist/${{ matrix.asset_name }}
171
-
172
- # Apply ad-hoc code signing for macOS security
173
- echo "Adding ad-hoc code signature to executable..."
174
- codesign --force --sign - dist/${{ matrix.asset_name }} || echo "Code signing failed, continuing..."
175
-
176
- # Remove quarantine attribute to help with Gatekeeper
177
- xattr -c dist/${{ matrix.asset_name }} 2>/dev/null || echo "No quarantine attributes to remove"
178
-
179
- # Verify signing
180
- echo "Verifying code signature..."
181
- codesign --verify dist/${{ matrix.asset_name }} && echo "✅ Signature verified" || echo "⚠️ Signature verification failed"
182
-
183
- echo "✅ macOS executable ready - double-click will open in Terminal with console interface"
184
158
  fi
185
159
 
186
160
  # Show final result
@@ -194,9 +168,6 @@ jobs:
194
168
  if [[ "$RUNNER_OS" == "Windows" ]]; then
195
169
  echo "Testing Windows executable..."
196
170
  ls -la dist/${{ matrix.asset_name }}
197
- elif [[ "$RUNNER_OS" == "macOS" ]]; then
198
- echo "Testing macOS executable..."
199
- ./dist/${{ matrix.asset_name }} --help || echo "Basic test completed"
200
171
  fi
201
172
 
202
173
  - name: Upload executable
@@ -245,6 +216,4 @@ jobs:
245
216
  uses: softprops/action-gh-release@v1
246
217
  with:
247
218
  files: |
248
- vibesurf-windows-x64.exe/vibesurf-windows-x64.exe
249
- vibesurf-macos-intel-x64/vibesurf-macos-intel-x64
250
- vibesurf-macos-apple-silicon/vibesurf-macos-apple-silicon
219
+ vibesurf-windows-x64.exe/vibesurf-windows-x64.exe
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.13
3
+ Version: 0.1.15
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -38,10 +38,20 @@ async def run_single_bu_agent():
38
38
  await main_browser_session.start()
39
39
  bu_tools = BrowserUseTools()
40
40
 
41
- llm = ChatOpenAICompatible(model='gemini-2.5-flash',
42
- base_url=os.getenv("OPENAI_ENDPOINT"),
43
- api_key=os.getenv("OPENAI_API_KEY"))
41
+ # llm = ChatOpenAICompatible(model='gemini-2.5-flash',
42
+ # base_url=os.getenv("OPENAI_ENDPOINT"),
43
+ # api_key=os.getenv("OPENAI_API_KEY"))
44
+
45
+ # llm = ChatOpenAICompatible(model='qwen-plus',
46
+ # base_url=os.getenv("ALIBABA_ENDPOINT"),
47
+ # api_key=os.getenv("ALIBABA_API_KEY"))
48
+
49
+ llm = ChatOpenAICompatible(model='kimi-k2-turbo-preview',
50
+ base_url=os.getenv("MOONSHOT_ENDPOINT"),
51
+ api_key=os.getenv("MOONSHOT_API_KEY"))
52
+
44
53
  task = "Search Google for 'Elon Mask' and tell me the top 3 results"
54
+
45
55
  # task = r"""
46
56
  # 1. 在新的tab 导航到 https://github.com/
47
57
  # 2. 在新的tab 导航到 https://vibemotion.co/
@@ -367,7 +377,7 @@ async def test_vibe_surf_agent_control():
367
377
 
368
378
 
369
379
  if __name__ == "__main__":
370
- # asyncio.run(run_single_bu_agent())
380
+ asyncio.run(run_single_bu_agent())
371
381
  # asyncio.run(run_multi_bu_agents())
372
- asyncio.run(test_vibe_surf_agent())
382
+ # asyncio.run(test_vibe_surf_agent())
373
383
  # asyncio.run(test_vibe_surf_agent_control())
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.1.13'
32
- __version_tuple__ = version_tuple = (0, 1, 13)
31
+ __version__ = version = '0.1.15'
32
+ __version_tuple__ = version_tuple = (0, 1, 15)
33
33
 
34
- __commit_id__ = commit_id = 'g21ffa8cf4'
34
+ __commit_id__ = commit_id = 'g45cf898aa'
@@ -259,10 +259,10 @@ class BrowserUseAgent(Agent):
259
259
  '⚠️ DeepSeek models do not support use_vision=True yet. Setting use_vision=False for now...')
260
260
  self.settings.use_vision = False
261
261
 
262
- if 'kimi-k2' in self.llm.model.lower():
263
- self.logger.warning(
264
- '⚠️ Kimi-k2 models do not support use_vision=True yet. Setting use_vision=False for now...')
265
- self.settings.use_vision = False
262
+ # if 'kimi-k2' in self.llm.model.lower():
263
+ # self.logger.warning(
264
+ # '⚠️ Kimi-k2 models do not support use_vision=True yet. Setting use_vision=False for now...')
265
+ # self.settings.use_vision = False
266
266
 
267
267
  # Handle users trying to use use_vision=True with XAI models
268
268
  if 'grok' in self.llm.model.lower():
@@ -8,7 +8,7 @@ You are VibeSurf Agent, a professional AI browser assistant developed by [WarmSh
8
8
 
9
9
  You operate using with followed primary agents for collaboration:
10
10
 
11
- 1. **Browser Automation**: Execute web tasks using `execute_browser_use_agent_tasks`
11
+ 1. **Browser Automation**: Execute web tasks using `execute_browser_use_agent`
12
12
  - **Parallel Task Processing**: Execute multiple independent browser tasks simultaneously
13
13
  - **Efficiency Optimization**: Dramatically reduce execution time for multi-step workflows
14
14
  - **Intelligent Task Distribution**: Automatically identify parallelize subtasks
@@ -512,7 +512,8 @@ async def _browser_task_execution_node_impl(state: VibeSurfState) -> VibeSurfSta
512
512
  task_count = len(state.browser_tasks)
513
513
  if task_count == 0:
514
514
  raise ValueError("No browser tasks assigned. Please assign 1 task at least.")
515
-
515
+ if not state.browser_results:
516
+ state.browser_results = []
516
517
  if task_count <= 1:
517
518
  # Single task execution
518
519
  logger.info("📝 Using single execution for single task")
@@ -68,15 +68,19 @@ async def submit_task(
68
68
  # Get LLM profile from database
69
69
  llm_profile = await LLMProfileQueries.get_profile_with_decrypted_key(db, task_request.llm_profile_name)
70
70
  if not llm_profile:
71
- raise HTTPException(
72
- status_code=404,
73
- detail=f"LLM profile '{task_request.llm_profile_name}' not found"
74
- )
71
+ active_task = None
72
+ return {
73
+ "success": False,
74
+ "error": "llm_connection_failed",
75
+ "message": f"Failed to get LLM profile with decrypted key {task_request.llm_profile_name}",
76
+ "llm_profile": task_request.llm_profile_name
77
+ }
75
78
 
76
79
  # Initialize LLM for this task if needed
77
80
  if not current_llm_profile_name or current_llm_profile_name != task_request.llm_profile_name:
78
81
  current_llm_profile_name = task_request.llm_profile_name
79
82
  success, message = await _ensure_llm_initialized(llm_profile)
83
+ logger.info("Test LLM Connection!")
80
84
  if not success:
81
85
  active_task = None
82
86
  return {
@@ -24,7 +24,7 @@ Example usage:
24
24
  temperature=0,
25
25
  )
26
26
  """
27
-
27
+ import pdb
28
28
  from dataclasses import dataclass
29
29
  from typing import Any, TypeVar, overload
30
30
  from pydantic import BaseModel
@@ -223,9 +223,11 @@ class ChatOpenAICompatible(ChatOpenAI):
223
223
  """
224
224
  # If this is not a special model or no structured output is requested,
225
225
  # use the parent implementation directly
226
+ if self._is_qwen_model() or self._is_kimi_model():
227
+ self.add_schema_to_system_prompt = True
228
+
226
229
  if not (self._is_gemini_model() or self._is_kimi_model()) or output_format is None:
227
230
  return await super().ainvoke(messages, output_format)
228
-
229
231
  openai_messages = OpenAIMessageSerializer.serialize_messages(messages)
230
232
 
231
233
  try:
@@ -269,9 +271,8 @@ class ChatOpenAICompatible(ChatOpenAI):
269
271
  )
270
272
 
271
273
  else:
272
- original_schema = SchemaOptimizer.create_optimized_json_schema(output_format)
273
-
274
274
  # Apply appropriate schema fix based on model type
275
+ original_schema = SchemaOptimizer.create_optimized_json_schema(output_format)
275
276
  if self._is_gemini_model():
276
277
  logger.debug(f"🔧 Applying Gemini schema fixes for model: {self.model}")
277
278
  fixed_schema = self._fix_gemini_schema(original_schema)
@@ -105,13 +105,15 @@ class VibeSurfTools:
105
105
 
106
106
  def _register_todo_actions(self):
107
107
  @self.registry.action(
108
- 'Generate a new todo.md file with the provided todo items in markdown checkbox format.'
108
+ 'Generate a new todo.md file with the provided todo items in markdown checkbox format.',
109
+ param_model=TodoGenerateAction
109
110
  )
110
- async def generate_todos(todo_items: list[str], file_system: CustomFileSystem):
111
+ async def generate_todos(params: TodoGenerateAction, file_system: CustomFileSystem):
111
112
  """Generate a new todo.md file with todo items in markdown format"""
112
113
  try:
113
114
  # Format todo items as markdown checkboxes
114
115
  formatted_items = []
116
+ todo_items = params.todo_items
115
117
  for item in todo_items:
116
118
  # Clean item and ensure it doesn't already have checkbox format
117
119
  clean_item = item.strip()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.13
3
+ Version: 0.1.15
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -60,11 +60,7 @@ current_platform = platform.system()
60
60
  print(f"Building for platform: {current_platform}")
61
61
 
62
62
  # Configure icon and console mode based on platform
63
- if current_platform == "Darwin": # macOS
64
- icon_file = vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.icns'
65
- console_mode = True # Terminal mode for macOS CLI application
66
- print(f"macOS detected - using ICNS icon and terminal mode")
67
- elif current_platform == "Windows":
63
+ if current_platform == "Windows":
68
64
  # Windows can use ICO or PNG, but prefer ICO if available
69
65
  ico_file = vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.ico'
70
66
  if ico_file.exists():
@@ -76,7 +72,7 @@ elif current_platform == "Windows":
76
72
  console_mode = True
77
73
  else: # Other platforms not supported
78
74
  print(f"ERROR: Platform {current_platform} is not supported")
79
- print("VibeSurf currently supports macOS and Windows only")
75
+ print("VibeSurf currently supports Windows only")
80
76
  sys.exit(1)
81
77
 
82
78
  # Verify icon file exists
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
@@ -99,7 +99,6 @@ class TodoModification(BaseModel):
99
99
  description='Text of the todo item to operate on',
100
100
  )
101
101
 
102
-
103
102
  class TodoModifyAction(BaseModel):
104
103
  """Parameters for modifying todo items"""
105
104
  modifications: list[TodoModification] = Field(
@@ -108,6 +107,7 @@ class TodoModifyAction(BaseModel):
108
107
  )
109
108
 
110
109
 
110
+
111
111
  class VibeSurfDoneAction(BaseModel):
112
112
  """Parameters for task completion output"""
113
113
  response: str = Field(