vibecore 0.3.0__py3-none-any.whl → 0.6.2__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.
- vibecore/agents/default.py +3 -3
- vibecore/agents/task.py +3 -3
- vibecore/cli.py +67 -43
- vibecore/context.py +74 -11
- vibecore/flow.py +335 -73
- vibecore/handlers/stream_handler.py +35 -56
- vibecore/main.py +70 -272
- vibecore/session/jsonl_session.py +3 -1
- vibecore/session/loader.py +2 -2
- vibecore/settings.py +48 -1
- vibecore/tools/file/executor.py +59 -13
- vibecore/tools/file/tools.py +9 -9
- vibecore/tools/path_validator.py +251 -0
- vibecore/tools/python/helpers.py +2 -2
- vibecore/tools/python/tools.py +2 -2
- vibecore/tools/shell/executor.py +63 -7
- vibecore/tools/shell/tools.py +9 -9
- vibecore/tools/task/executor.py +2 -2
- vibecore/tools/task/tools.py +2 -2
- vibecore/tools/todo/manager.py +2 -10
- vibecore/tools/todo/models.py +5 -14
- vibecore/tools/todo/tools.py +5 -5
- vibecore/tools/webfetch/tools.py +1 -4
- vibecore/tools/websearch/ddgs/backend.py +1 -1
- vibecore/tools/websearch/tools.py +1 -4
- vibecore/widgets/core.py +3 -17
- vibecore/widgets/feedback.py +164 -0
- vibecore/widgets/feedback.tcss +121 -0
- vibecore/widgets/messages.py +22 -2
- vibecore/widgets/messages.tcss +28 -0
- vibecore/widgets/tool_messages.py +19 -4
- vibecore/widgets/tool_messages.tcss +23 -0
- {vibecore-0.3.0.dist-info → vibecore-0.6.2.dist-info}/METADATA +122 -29
- {vibecore-0.3.0.dist-info → vibecore-0.6.2.dist-info}/RECORD +37 -34
- {vibecore-0.3.0.dist-info → vibecore-0.6.2.dist-info}/WHEEL +0 -0
- {vibecore-0.3.0.dist-info → vibecore-0.6.2.dist-info}/entry_points.txt +0 -0
- {vibecore-0.3.0.dist-info → vibecore-0.6.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -260,6 +260,11 @@ class TaskToolMessage(BaseToolMessage):
|
|
|
260
260
|
"""Add a message widget to the main scroll area."""
|
|
261
261
|
await self.add_message(message)
|
|
262
262
|
|
|
263
|
+
async def handle_agent_message_update(self, message: BaseMessage) -> None:
|
|
264
|
+
"""Message in the widget's message list is updated with new delta or status"""
|
|
265
|
+
# TODO(serialx): implement later
|
|
266
|
+
pass
|
|
267
|
+
|
|
263
268
|
async def handle_agent_update(self, new_agent: Agent) -> None:
|
|
264
269
|
"""Handle agent updates."""
|
|
265
270
|
pass
|
|
@@ -486,6 +491,7 @@ class MCPToolMessage(BaseToolMessage):
|
|
|
486
491
|
class RichToolMessage(BaseToolMessage):
|
|
487
492
|
"""A widget to display rich (json/markdown) custom tool execution messages."""
|
|
488
493
|
|
|
494
|
+
SQL_QUERY_KEY = "query"
|
|
489
495
|
tool_name: reactive[str] = reactive("")
|
|
490
496
|
arguments: reactive[str] = reactive("")
|
|
491
497
|
|
|
@@ -534,6 +540,15 @@ class RichToolMessage(BaseToolMessage):
|
|
|
534
540
|
# Not valid JSON, return as-is
|
|
535
541
|
return False, output
|
|
536
542
|
|
|
543
|
+
def on_button_pressed(self, event: Button.Pressed) -> None:
|
|
544
|
+
"""Handle button press events."""
|
|
545
|
+
if event.button.has_class("copy-button"):
|
|
546
|
+
arg_dict = json.loads(self.arguments)
|
|
547
|
+
if self.SQL_QUERY_KEY in arg_dict:
|
|
548
|
+
# XXX(serialx): Special case for SQL queries
|
|
549
|
+
query = arg_dict[self.SQL_QUERY_KEY]
|
|
550
|
+
self.app.copy_to_clipboard(query)
|
|
551
|
+
|
|
537
552
|
def compose(self) -> ComposeResult:
|
|
538
553
|
"""Create child widgets for the rich tool message."""
|
|
539
554
|
# Header line showing MCP server and tool
|
|
@@ -548,12 +563,12 @@ class RichToolMessage(BaseToolMessage):
|
|
|
548
563
|
# Truncate arguments if too long
|
|
549
564
|
max_args_length = 100
|
|
550
565
|
arg_dict = json.loads(self.arguments)
|
|
551
|
-
SQL_QUERY_KEY
|
|
552
|
-
if SQL_QUERY_KEY in arg_dict:
|
|
566
|
+
if self.SQL_QUERY_KEY in arg_dict:
|
|
553
567
|
# XXX(serialx): Special case for SQL queries
|
|
554
|
-
query = arg_dict[SQL_QUERY_KEY]
|
|
568
|
+
query = arg_dict[self.SQL_QUERY_KEY]
|
|
569
|
+
yield Button("Copy", classes="copy-button", variant="primary")
|
|
555
570
|
yield ExpandableMarkdown(query, language="sql", truncated_lines=8, classes="rich-output-sql")
|
|
556
|
-
del arg_dict[SQL_QUERY_KEY]
|
|
571
|
+
del arg_dict[self.SQL_QUERY_KEY]
|
|
557
572
|
|
|
558
573
|
display_args = arg_dict[:max_args_length] + "…" if len(arg_dict) > max_args_length else arg_dict
|
|
559
574
|
yield Static(f"Args: {display_args}", classes="rich-arguments-text")
|
|
@@ -291,6 +291,29 @@ MCPToolMessage {
|
|
|
291
291
|
RichToolMessage {
|
|
292
292
|
Horizontal.rich-arguments {
|
|
293
293
|
height: auto;
|
|
294
|
+
layers: main button;
|
|
295
|
+
|
|
296
|
+
.copy-button {
|
|
297
|
+
layer: button;
|
|
298
|
+
dock: right;
|
|
299
|
+
height: 1;
|
|
300
|
+
width: 8;
|
|
301
|
+
min-width: 8;
|
|
302
|
+
margin: 0;
|
|
303
|
+
padding: 0;
|
|
304
|
+
background: $secondary;
|
|
305
|
+
color: $text;
|
|
306
|
+
border: none;
|
|
307
|
+
|
|
308
|
+
&:hover {
|
|
309
|
+
background: $secondary-lighten-1;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
&:focus {
|
|
313
|
+
background: $secondary-lighten-1;
|
|
314
|
+
text-style: bold;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
294
317
|
|
|
295
318
|
&> .rich-arguments-prefix {
|
|
296
319
|
height: 1;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vibecore
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Build your own AI-powered automation tools in the terminal with this extensible agent framework
|
|
5
5
|
Project-URL: Homepage, https://github.com/serialx/vibecore
|
|
6
6
|
Project-URL: Repository, https://github.com/serialx/vibecore
|
|
@@ -158,7 +158,6 @@ Once vibecore is running, you can:
|
|
|
158
158
|
### Commands
|
|
159
159
|
|
|
160
160
|
- `/help` - Show help and keyboard shortcuts
|
|
161
|
-
- `/clear` - Clear the current session and start a new one
|
|
162
161
|
|
|
163
162
|
## Flow Mode (Experimental)
|
|
164
163
|
|
|
@@ -177,37 +176,56 @@ Flow Mode allows you to:
|
|
|
177
176
|
|
|
178
177
|
```python
|
|
179
178
|
import asyncio
|
|
180
|
-
from agents import Agent
|
|
181
|
-
from vibecore.flow import
|
|
179
|
+
from agents import Agent
|
|
180
|
+
from vibecore.flow import Vibecore, VibecoreRunnerBase
|
|
182
181
|
from vibecore.context import VibecoreContext
|
|
182
|
+
from vibecore.settings import settings
|
|
183
183
|
|
|
184
184
|
# Define your agent with tools
|
|
185
185
|
agent = Agent[VibecoreContext](
|
|
186
186
|
name="Assistant",
|
|
187
187
|
instructions="You are a helpful assistant",
|
|
188
188
|
tools=[...], # Your tools here
|
|
189
|
+
model=settings.model,
|
|
189
190
|
)
|
|
190
191
|
|
|
191
|
-
#
|
|
192
|
-
|
|
192
|
+
# Create Vibecore instance
|
|
193
|
+
vibecore = Vibecore[VibecoreContext, str]()
|
|
194
|
+
|
|
195
|
+
# Define your conversation logic with decorator
|
|
196
|
+
@vibecore.workflow()
|
|
197
|
+
async def logic(
|
|
198
|
+
runner: VibecoreRunnerBase[VibecoreContext, str],
|
|
199
|
+
) -> str:
|
|
193
200
|
# Get user input programmatically
|
|
194
|
-
user_message = await user_input("What would you like to do?")
|
|
195
|
-
|
|
196
|
-
#
|
|
197
|
-
|
|
201
|
+
user_message = await runner.user_input("What would you like to do?")
|
|
202
|
+
|
|
203
|
+
# Print status updates
|
|
204
|
+
await runner.print(f"Processing: {user_message}")
|
|
205
|
+
|
|
206
|
+
# Process with agent (handles streaming automatically)
|
|
207
|
+
result = await runner.run_agent(
|
|
198
208
|
agent,
|
|
199
209
|
input=user_message,
|
|
200
|
-
context=
|
|
201
|
-
session=
|
|
210
|
+
context=runner.context,
|
|
211
|
+
session=runner.session,
|
|
202
212
|
)
|
|
203
|
-
|
|
204
|
-
# Handle the response
|
|
205
|
-
app.current_worker = app.handle_streamed_response(result)
|
|
206
|
-
await app.current_worker.wait()
|
|
207
213
|
|
|
208
|
-
|
|
214
|
+
await runner.print("Done!")
|
|
215
|
+
return result.final_output
|
|
216
|
+
|
|
217
|
+
# Run the flow in different modes
|
|
209
218
|
async def main():
|
|
210
|
-
|
|
219
|
+
# Option 1: TUI mode (full terminal interface)
|
|
220
|
+
result = await vibecore.run_textual(shutdown=False)
|
|
221
|
+
|
|
222
|
+
# Option 2: CLI mode (simple stdin/stdout)
|
|
223
|
+
# result = await vibecore.run_cli()
|
|
224
|
+
|
|
225
|
+
# Option 3: Static mode (programmatic, for testing)
|
|
226
|
+
# result = await vibecore.run("Calculate 2+2")
|
|
227
|
+
|
|
228
|
+
print(f"Final output: {result}")
|
|
211
229
|
|
|
212
230
|
if __name__ == "__main__":
|
|
213
231
|
asyncio.run(main())
|
|
@@ -225,11 +243,53 @@ Flow Mode shines when building complex multi-agent systems. See `examples/custom
|
|
|
225
243
|
|
|
226
244
|
### Key Components
|
|
227
245
|
|
|
228
|
-
- **`
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
- **`
|
|
232
|
-
-
|
|
246
|
+
- **`Vibecore` class**: Main entry point that orchestrates your workflow
|
|
247
|
+
- **`@vibecore.workflow()` decorator**: Defines your conversation logic function
|
|
248
|
+
- **Runner argument**: Every workflow receives a runner instance for user input, printing, and agent execution
|
|
249
|
+
- **`runner.user_input()`**: Programmatically collect user input
|
|
250
|
+
- **`runner.print()`**: Display status messages to the user
|
|
251
|
+
- **`runner.run_agent()`**: Execute agent with automatic streaming handling
|
|
252
|
+
- **`runner.context`**: Shared state (VibecoreContext) across tools and agents
|
|
253
|
+
- **`runner.session`**: Conversation history and persistence
|
|
254
|
+
- **Multiple execution modes**:
|
|
255
|
+
- `run_textual()`: Full TUI with streaming (original behavior)
|
|
256
|
+
- `run_cli()`: Simple CLI with stdin/stdout
|
|
257
|
+
- `run()`: Static mode with predefined inputs (perfect for testing)
|
|
258
|
+
- **Agent Handoffs**: Transfer control between specialized agents with context preservation
|
|
259
|
+
|
|
260
|
+
> 🛠️ Upgrading from an older release? Read the [Runner Migration Guide](docs/runner_migration.md) for step-by-step instructions.
|
|
261
|
+
|
|
262
|
+
### Multi-Mode Execution
|
|
263
|
+
|
|
264
|
+
One of vibecore's key strengths is the ability to run the **same workflow code** in different execution modes without modification:
|
|
265
|
+
|
|
266
|
+
#### TUI Mode (Textual User Interface)
|
|
267
|
+
Full-featured terminal interface with streaming responses, tool visualization, and interactive controls:
|
|
268
|
+
```python
|
|
269
|
+
result = await vibecore.run_textual(shutdown=False)
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
#### CLI Mode (Command-Line Interface)
|
|
273
|
+
Simple stdin/stdout interaction for scripting and automation:
|
|
274
|
+
```python
|
|
275
|
+
result = await vibecore.run_cli()
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
#### Static Mode (Programmatic)
|
|
279
|
+
Execute with predefined inputs, perfect for testing and batch processing:
|
|
280
|
+
```python
|
|
281
|
+
# Single input
|
|
282
|
+
result = await vibecore.run("Calculate 2+2")
|
|
283
|
+
|
|
284
|
+
# Multiple inputs (for multi-turn workflows)
|
|
285
|
+
result = await vibecore.run(["First query", "Follow-up", "Final question"])
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
This unified interface means you can:
|
|
289
|
+
- **Develop once, deploy anywhere**: Write your workflow logic once and run it in any mode
|
|
290
|
+
- **Test easily**: Use static mode for automated testing with predefined inputs
|
|
291
|
+
- **Choose the right interface**: TUI for development, CLI for scripts, static for tests
|
|
292
|
+
- **Extend to new modes**: Add custom runners (HTTP API, Discord bot, etc.) by implementing the runner interface
|
|
233
293
|
|
|
234
294
|
### Use Cases
|
|
235
295
|
|
|
@@ -414,10 +474,37 @@ uv run ruff check . && uv run ruff format --check . && uv run pyright . && uv ru
|
|
|
414
474
|
|
|
415
475
|
## Configuration
|
|
416
476
|
|
|
417
|
-
###
|
|
477
|
+
### Path Confinement (Security)
|
|
478
|
+
|
|
479
|
+
vibecore includes a path confinement system that restricts file and shell operations to specified directories for enhanced security. This prevents agents from accessing sensitive system files or directories outside your project.
|
|
480
|
+
|
|
481
|
+
#### Configuration Options
|
|
482
|
+
|
|
483
|
+
```yaml
|
|
484
|
+
# config.yaml
|
|
485
|
+
path_confinement:
|
|
486
|
+
enabled: true # Enable/disable path confinement (default: true)
|
|
487
|
+
allowed_directories: # List of allowed directories (default: [current working directory])
|
|
488
|
+
- /home/user/projects
|
|
489
|
+
- /tmp
|
|
490
|
+
allow_home: false # Allow access to user's home directory (default: false)
|
|
491
|
+
allow_temp: true # Allow access to system temp directory (default: true)
|
|
492
|
+
strict_mode: false # Strict validation mode (default: false)
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
Or via environment variables:
|
|
496
|
+
```bash
|
|
497
|
+
export VIBECORE_PATH_CONFINEMENT__ENABLED=true
|
|
498
|
+
export VIBECORE_PATH_CONFINEMENT__ALLOWED_DIRECTORIES='["/home/user/projects", "/tmp"]'
|
|
499
|
+
export VIBECORE_PATH_CONFINEMENT__ALLOW_HOME=false
|
|
500
|
+
export VIBECORE_PATH_CONFINEMENT__ALLOW_TEMP=true
|
|
501
|
+
```
|
|
418
502
|
|
|
419
|
-
|
|
420
|
-
-
|
|
503
|
+
When enabled, the path confinement system:
|
|
504
|
+
- Validates all file read/write/edit operations
|
|
505
|
+
- Checks paths in shell commands before execution
|
|
506
|
+
- Resolves symlinks to prevent escapes
|
|
507
|
+
- Blocks access to files outside allowed directories
|
|
421
508
|
|
|
422
509
|
### Environment Variables
|
|
423
510
|
|
|
@@ -475,9 +562,15 @@ vibecore is built with a modular, extensible architecture:
|
|
|
475
562
|
|
|
476
563
|
## Recent Updates
|
|
477
564
|
|
|
478
|
-
- **
|
|
565
|
+
- **Flow Mode Refactor (v0.5.0)**: Complete redesign with multi-mode execution support
|
|
566
|
+
- New `Vibecore` class with decorator-based workflow definition
|
|
567
|
+
- Unified interface: `user_input()`, `print()`, `run_agent()`
|
|
568
|
+
- Three execution modes: TUI, CLI, and static (perfect for testing)
|
|
569
|
+
- Cleaner API with less boilerplate and better type safety
|
|
570
|
+
- **Path Confinement**: Security feature to restrict file and shell operations to specified directories
|
|
571
|
+
- **Reasoning View**: ReasoningMessage widget with live reasoning summaries during streaming
|
|
479
572
|
- **Context Usage Bar & CWD**: Footer shows token usage progress and current working directory
|
|
480
|
-
- **Keyboard & Commands**: Ctrl+Shift+D toggles theme, Esc cancels, Ctrl+D double-press to exit, `/help`
|
|
573
|
+
- **Keyboard & Commands**: Ctrl+Shift+D toggles theme, Esc cancels, Ctrl+D double-press to exit, `/help` command
|
|
481
574
|
- **MCP Tool Output**: Improved rendering with Markdown and JSON prettification
|
|
482
575
|
- **MCP Support**: Full integration with Model Context Protocol for external tool connections
|
|
483
576
|
- **Print Mode**: `-p` flag to print response and exit for pipes/automation
|
|
@@ -487,7 +580,7 @@ vibecore is built with a modular, extensible architecture:
|
|
|
487
580
|
- [x] More custom tool views (Python, Read, Todo widgets)
|
|
488
581
|
- [x] Automation (vibecore -p "prompt")
|
|
489
582
|
- [x] MCP (Model Context Protocol) support
|
|
490
|
-
- [
|
|
583
|
+
- [x] Path confinement for security
|
|
491
584
|
- [ ] Multi-agent system (agent-as-tools)
|
|
492
585
|
- [ ] Plugin system for custom tools
|
|
493
586
|
- [ ] Automated workflow
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
vibecore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
vibecore/cli.py,sha256=
|
|
3
|
-
vibecore/context.py,sha256=
|
|
4
|
-
vibecore/flow.py,sha256=
|
|
5
|
-
vibecore/main.py,sha256=
|
|
2
|
+
vibecore/cli.py,sha256=_nYqGoj-ZvNYLEGVIP82htbvF4O-GwmhoISmmVVBegI,8473
|
|
3
|
+
vibecore/context.py,sha256=mfm3IBTnnoyfL3jDisr_B-z_44eanmXw6Lqz3tXw8Vg,3045
|
|
4
|
+
vibecore/flow.py,sha256=beN1kgd4krhMoPia0m_ygveXX0JCw1K2LB05rh4syfU,13071
|
|
5
|
+
vibecore/main.py,sha256=H_IyI6YyiXZLgM127Mhe_zY4nbHNA3TqsK_8sxJoaD8,12832
|
|
6
6
|
vibecore/main.tcss,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
vibecore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
vibecore/settings.py,sha256=
|
|
9
|
-
vibecore/agents/default.py,sha256=
|
|
8
|
+
vibecore/settings.py,sha256=0hugs44VOKB47ysmkJ1BqZnfR8-Lvm_8OmEt3VTUjak,8471
|
|
9
|
+
vibecore/agents/default.py,sha256=LTMZcDzzl4s8B4QeqF6EY2TqP3El-LuuaQuGrt3ytSk,2299
|
|
10
10
|
vibecore/agents/prompts.py,sha256=0oO9QzcytIbzgZcKJQjWD9fSRNQqBqqK5ku0fcYZZrA,324
|
|
11
|
-
vibecore/agents/task.py,sha256=
|
|
11
|
+
vibecore/agents/task.py,sha256=jtYurlSHcSmPz0oRGDmBDUqD0F4HZznBm8wNd8Xj6IA,1910
|
|
12
12
|
vibecore/auth/__init__.py,sha256=lFxAcdjXpmCjU2tWBnej3fyUqJKSc41qHLF8929nMRM,451
|
|
13
13
|
vibecore/auth/config.py,sha256=xEuChq61dygaDGhpOA9kK3VSximL42Usd-xBOY2XMpw,1650
|
|
14
14
|
vibecore/auth/interceptor.py,sha256=KsMbnTi8DDVDnwiC1YT4APjcpvpIVQK3kMSS28wizNs,5127
|
|
@@ -19,7 +19,7 @@ vibecore/auth/pkce.py,sha256=YMQxddItPqUyy1pkKfYPNWIahWhIUVWL7vPFsQQvb7M,956
|
|
|
19
19
|
vibecore/auth/storage.py,sha256=dWSDi4thRHHrSTJmAOInOdArTGQ_t0EdWHrk4Am8LWg,3495
|
|
20
20
|
vibecore/auth/token_manager.py,sha256=Dwd0EkbBVeoIef7K6RW4QzaS7-6HAM-or0Ra4M1xddg,4611
|
|
21
21
|
vibecore/handlers/__init__.py,sha256=pFogA2n3GeIi4lmlUEU5jFprNNOaA6AWRR8Wc9X-P4Y,148
|
|
22
|
-
vibecore/handlers/stream_handler.py,sha256=
|
|
22
|
+
vibecore/handlers/stream_handler.py,sha256=pD0hk0cFDwAAh6wstBKwKx7WHgvatmVoZqeiVOt-2uc,10029
|
|
23
23
|
vibecore/mcp/__init__.py,sha256=sl2_8pWjPx4TotO0ZojunVA6Jn6yOhbTQNbQG9-C-Jc,199
|
|
24
24
|
vibecore/mcp/manager.py,sha256=RRpoFUiQjSg0-h9M7sF3odaSM7LURwrxVlaae5Yml3M,5644
|
|
25
25
|
vibecore/mcp/server_wrapper.py,sha256=CkTyqZzmy7oeciSml0Q915orho_U2XcHoqhDVMOq7nY,3989
|
|
@@ -29,57 +29,60 @@ vibecore/models/anthropic_auth.py,sha256=_hRGbPHTs6IrkSc5mDI7mshdOZYCyqu82HX9WdQ
|
|
|
29
29
|
vibecore/prompts/common_system_prompt.txt,sha256=L-YlOfTJSQLtVg6d0r9lcD5FrgOLzoSWjGzVfQjcDBg,4916
|
|
30
30
|
vibecore/session/__init__.py,sha256=FXbtw8DZVBw8e3qCA2cQharMzozblhwA0yU4U0JRSkM,121
|
|
31
31
|
vibecore/session/file_lock.py,sha256=vCuDdfaOGDeVpTjJP6yBJx7onIT7JkkAeAuWAtuLJb8,3739
|
|
32
|
-
vibecore/session/jsonl_session.py,sha256=
|
|
33
|
-
vibecore/session/loader.py,sha256=
|
|
32
|
+
vibecore/session/jsonl_session.py,sha256=hS03fbgPzKEKdUesdg_8OHCoD1nnMFjHe54K2Psh3SY,8771
|
|
33
|
+
vibecore/session/loader.py,sha256=HTQDXW9kcw9eBWu7zN34jvRstXlKejyGE6ZoR6ux3Go,6846
|
|
34
34
|
vibecore/session/path_utils.py,sha256=_meng4PnOR59ekPWp_WICkt8yVkokt8c6oePZvk3m-4,2544
|
|
35
35
|
vibecore/tools/__init__.py,sha256=nppfKiflvkQRUotBrj9nFU0veWex1DE_YX1fg67SRlw,37
|
|
36
36
|
vibecore/tools/base.py,sha256=POI1bM89qDWlQ5VfcdUFoIg_Tv5Rlrd6sQTRLj-4YmQ,658
|
|
37
|
+
vibecore/tools/path_validator.py,sha256=3Dob33-A6aNy92UeFAEEQME10V_P4N6ZODf7o5H6fYU,8566
|
|
37
38
|
vibecore/tools/file/__init__.py,sha256=EhdebEC6JTaiROkpItoJWK2lGEq2B5ReNL_IRqxZX5w,147
|
|
38
|
-
vibecore/tools/file/executor.py,sha256=
|
|
39
|
-
vibecore/tools/file/tools.py,sha256=
|
|
39
|
+
vibecore/tools/file/executor.py,sha256=2r4r7Q-_2POkxfHHAA2dCo4bEU9c6TtfgBOIIJaV6HU,12136
|
|
40
|
+
vibecore/tools/file/tools.py,sha256=6mwrQNkW7njjqdv_MqHHRwvMFPxELi27QJaUK9n9FP8,8370
|
|
40
41
|
vibecore/tools/file/utils.py,sha256=0Gef8HZgq520pqYgsF8n4cL9FNtzA7nYEr8bBCZVnro,2356
|
|
41
42
|
vibecore/tools/python/__init__.py,sha256=bqSKgP2pY3bArCmQxOsWFflfmASq3SybOlrmZiz9y4s,35
|
|
42
|
-
vibecore/tools/python/helpers.py,sha256=
|
|
43
|
+
vibecore/tools/python/helpers.py,sha256=NlGzDHseubLsEGVnyU2fAtCeb_nKh9vzEicOlQeWzlY,2922
|
|
43
44
|
vibecore/tools/python/manager.py,sha256=5r7RAqJL7FAIf3xBNqsr-T_La2XHd3KIy5olubuBRZ4,7502
|
|
44
|
-
vibecore/tools/python/tools.py,sha256=
|
|
45
|
+
vibecore/tools/python/tools.py,sha256=xSPPLbNh7rDmF0Oo6_77I_Q_1zsxyqq5ztELynIxHmg,921
|
|
45
46
|
vibecore/tools/python/backends/__init__.py,sha256=RTfU7AzlVyDSaldfVNdKAgv4759RQAl07-UFGqc70Oo,50
|
|
46
47
|
vibecore/tools/python/backends/terminal_backend.py,sha256=3PA4haJN-dyIvnudx6qfx58ThjaeT7DULnCvhacADbw,1908
|
|
47
48
|
vibecore/tools/shell/__init__.py,sha256=Ias6qmBMDK29q528VtUGtCQeYD4RU_Yx73SIAJrB8No,133
|
|
48
|
-
vibecore/tools/shell/executor.py,sha256=
|
|
49
|
-
vibecore/tools/shell/tools.py,sha256=
|
|
49
|
+
vibecore/tools/shell/executor.py,sha256=vVWZ2jk_TAAkgbOQV0FuC2xzTdeOtdWOqj60bxAOAj4,9358
|
|
50
|
+
vibecore/tools/shell/tools.py,sha256=D_w9m8W1jJjeEnv3t8yie_SXd1Ce1wAtU8dW8xwVAOY,6874
|
|
50
51
|
vibecore/tools/task/__init__.py,sha256=Fyw33zGiBArMnPuRMm7qwSYE6ZRPCZVbHK6eIUJDiJY,112
|
|
51
|
-
vibecore/tools/task/executor.py,sha256=
|
|
52
|
-
vibecore/tools/task/tools.py,sha256=
|
|
52
|
+
vibecore/tools/task/executor.py,sha256=Q7rNmPb38CcOrMvPJnxERZc3S4ryti_T_f-yRpA1Ivc,1614
|
|
53
|
+
vibecore/tools/task/tools.py,sha256=uAIAVkcIWmIolpGo9LlS_2CacWmxuWvp5rKwijvwZC0,2265
|
|
53
54
|
vibecore/tools/todo/__init__.py,sha256=67o76OyzqYKBH461R9H2-rkNx7ZK6tRSydca3GjqKh8,29
|
|
54
|
-
vibecore/tools/todo/manager.py,sha256
|
|
55
|
-
vibecore/tools/todo/models.py,sha256=
|
|
56
|
-
vibecore/tools/todo/tools.py,sha256=
|
|
55
|
+
vibecore/tools/todo/manager.py,sha256=-kww4y57BUFbnKI2eWo44CC1fDNX_UcSm76GwCwL3do,624
|
|
56
|
+
vibecore/tools/todo/models.py,sha256=qikR5S4VmwkvYTWxhlBxRxXgri5YitZ6hVdRrRySRAk,503
|
|
57
|
+
vibecore/tools/todo/tools.py,sha256=KhGZ5LaDPfR4OGUWVNCokIN1VCHgrZ0nsA7sDoRzVI0,5176
|
|
57
58
|
vibecore/tools/webfetch/__init__.py,sha256=fKfht3oiz-wMNgtukQjYIUcUC4y7g3GLKK7QXHl0Mcg,224
|
|
58
59
|
vibecore/tools/webfetch/executor.py,sha256=DFjnHgAvDPuwP5h4fgXM2JH270TgF4Vux7ndmZLs9BI,4912
|
|
59
60
|
vibecore/tools/webfetch/models.py,sha256=YvGR4i8Mi7gygCJe7-VPyrvbgacBUJ1PLHyCmOQPmuU,694
|
|
60
|
-
vibecore/tools/webfetch/tools.py,sha256=
|
|
61
|
+
vibecore/tools/webfetch/tools.py,sha256=X1uvJLD-7mA1ewZcmYI-MhTNuKcAELEdcF3UDY6g73s,1384
|
|
61
62
|
vibecore/tools/websearch/__init__.py,sha256=xl3aPD-pOt0Ya4L8khMbOfqpcCpkWTy2-KVk2hUxnOU,97
|
|
62
63
|
vibecore/tools/websearch/base.py,sha256=El9Mx6MFWM3CKGG8MPbPIKgRjdbNZtylFALsPCUTPFs,596
|
|
63
64
|
vibecore/tools/websearch/executor.py,sha256=CLwFkPSDzllH7J1hNdjsp5L0SDLqoINlOSl-zoQKs2A,1114
|
|
64
65
|
vibecore/tools/websearch/models.py,sha256=5cwDw9dWLZ6krP_khx1euwsHjSYLIE4_hNefkjzrkWE,749
|
|
65
|
-
vibecore/tools/websearch/tools.py,sha256=
|
|
66
|
+
vibecore/tools/websearch/tools.py,sha256=1sk6q1ivUIk2rUfojYdHP5gHy7ONH3zxi1v2wHKZGWc,1624
|
|
66
67
|
vibecore/tools/websearch/ddgs/__init__.py,sha256=XwZ7As5mVqxXz69In96L3TDChPhpc8GnZR72LgdBvX4,113
|
|
67
|
-
vibecore/tools/websearch/ddgs/backend.py,sha256=
|
|
68
|
+
vibecore/tools/websearch/ddgs/backend.py,sha256=RACegeJkfqmbQbPKD8hBh3vIAIV6LnSWRaP7ZKQDAX0,1975
|
|
68
69
|
vibecore/utils/__init__.py,sha256=KIS8TkfaDZ1AclSstkYcG8DvJPNsJNOE4EL4zHJE2k4,112
|
|
69
70
|
vibecore/utils/text.py,sha256=RLVFrVsD5L7xi68JTgSa0PeN9S32faqIiaF79dNCyTM,978
|
|
70
|
-
vibecore/widgets/core.py,sha256=
|
|
71
|
+
vibecore/widgets/core.py,sha256=1ecAGcdSkDpnaZokLmWTF1Jm44q8ZLAsA3ras8ywEmo,11246
|
|
71
72
|
vibecore/widgets/core.tcss,sha256=fgjEv_3G_dAMwmWsaz4Uz-lXQzpN5oLSxeRYU4ygnDY,1016
|
|
72
73
|
vibecore/widgets/expandable.py,sha256=GIcXXzVGr4BdyATphUrHZqB30DF_WgeyrccjEIf7FWc,5603
|
|
73
74
|
vibecore/widgets/expandable.tcss,sha256=zmm5zDDabvXiePwwsuSGLPkxHUYunEjmwkp5XrTjxSw,1343
|
|
75
|
+
vibecore/widgets/feedback.py,sha256=LOlUB8pUkV7e2Iuh8WQlrxA2AkkHDQTCauCs2NwZRZM,6843
|
|
76
|
+
vibecore/widgets/feedback.tcss,sha256=dFS9VziCB-iCuKV8rT1ejRSyxY__Sx4IE5bCjNeNTVA,2497
|
|
74
77
|
vibecore/widgets/info.py,sha256=hXtsRUOE13oHbIm9FNe1GCUX_FCht28pgT9SQWeJ69I,1567
|
|
75
78
|
vibecore/widgets/info.tcss,sha256=v30IqNt1two-ezIcm18ZEInKRKcRkAW-h-UH2r8QzSo,201
|
|
76
|
-
vibecore/widgets/messages.py,sha256=
|
|
77
|
-
vibecore/widgets/messages.tcss,sha256=
|
|
79
|
+
vibecore/widgets/messages.py,sha256=ccSCSwOyluUkG2Jmbvs91bcSq20cMQQCkiSjKu78Lj8,9210
|
|
80
|
+
vibecore/widgets/messages.tcss,sha256=Dhz6X1Fkj2XN9bVGVH_hBelDF7WXNE6hHMkGQRQy1QA,1911
|
|
78
81
|
vibecore/widgets/tool_message_factory.py,sha256=yrZorT4HKo5b6rWUc0dgQle7q7cvLyq8JllE772RZS0,5730
|
|
79
|
-
vibecore/widgets/tool_messages.py,sha256=
|
|
80
|
-
vibecore/widgets/tool_messages.tcss,sha256=
|
|
81
|
-
vibecore-0.
|
|
82
|
-
vibecore-0.
|
|
83
|
-
vibecore-0.
|
|
84
|
-
vibecore-0.
|
|
85
|
-
vibecore-0.
|
|
82
|
+
vibecore/widgets/tool_messages.py,sha256=JnfcfGq-r9R69B2wALWtfqH1Rd2AdUsrYRd2N6xmM_I,29636
|
|
83
|
+
vibecore/widgets/tool_messages.tcss,sha256=gdChmHClURqn_sD9GkcOGQcQVYvUUl75mLUYp85sKz8,8442
|
|
84
|
+
vibecore-0.6.2.dist-info/METADATA,sha256=Ex4tMCX3m6t01qy_GT2XrRcg0xt2HKP-f4PsfaQYevE,22141
|
|
85
|
+
vibecore-0.6.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
86
|
+
vibecore-0.6.2.dist-info/entry_points.txt,sha256=i9mOKvpz07ciV_YYisxNCYZ53_Crjkn9mciiQ3aA6QM,51
|
|
87
|
+
vibecore-0.6.2.dist-info/licenses/LICENSE,sha256=KXxxifvrcreHrZ4aOYgP-vA8DRHHueW389KKOeEbtjc,1069
|
|
88
|
+
vibecore-0.6.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|