skiller 0.1.0b1__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.
- skiller-0.1.0b1/.codex/skills/skiller-dev/SKILL.md +70 -0
- skiller-0.1.0b1/.codex/skills/skiller-dev/agents/openai.yaml +4 -0
- skiller-0.1.0b1/.codex/skills/skiller-dev/references/pre-commit-checklist.md +45 -0
- skiller-0.1.0b1/.codex/skills/skiller-dev/references/runtime-patterns.md +79 -0
- skiller-0.1.0b1/.codex/skills/skiller-dev/references/testing-rules.md +57 -0
- skiller-0.1.0b1/.codex/skills/skiller-dev/references/workflow.md +116 -0
- skiller-0.1.0b1/.env.development +1 -0
- skiller-0.1.0b1/.github/workflows/feature.yml +56 -0
- skiller-0.1.0b1/.github/workflows/publish.yml +41 -0
- skiller-0.1.0b1/.github/workflows/release.yml +101 -0
- skiller-0.1.0b1/.gitignore +62 -0
- skiller-0.1.0b1/CHANGELOG.md +115 -0
- skiller-0.1.0b1/LICENSE +176 -0
- skiller-0.1.0b1/PKG-INFO +232 -0
- skiller-0.1.0b1/README.md +212 -0
- skiller-0.1.0b1/apps/tui/docs/architecture.md +172 -0
- skiller-0.1.0b1/apps/tui/docs/rules-code-style.md +19 -0
- skiller-0.1.0b1/apps/tui/docs/status-view.md +135 -0
- skiller-0.1.0b1/apps/tui/docs/transcript-spec.md +399 -0
- skiller-0.1.0b1/apps/tui/docs/usecase-definition.md +247 -0
- skiller-0.1.0b1/apps/tui/pyproject.toml +21 -0
- skiller-0.1.0b1/apps/tui/src/stui/__init__.py +3 -0
- skiller-0.1.0b1/apps/tui/src/stui/__main__.py +4 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/__init__.py +0 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/agent_interrupt_mapper.py +49 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/agent_stats_mapper.py +61 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_agent_adapter.py +43 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_agent_interrupt.py +28 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_agent_stats.py +53 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_invoker.py +28 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_notify_action_adapter.py +83 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_run_adapter.py +212 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_runs_adapter.py +65 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_waiting_adapter.py +83 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/default_events_port.py +75 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/default_installation_state_port.py +77 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/default_notify_action_port.py +57 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/default_run_port.py +17 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/default_runs_port.py +19 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/default_waiting_port.py +14 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/events/__init__.py +1 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/events/cli_log_event.py +23 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/events/cli_log_event_adapter.py +55 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/events/log_event_mapper.py +538 -0
- skiller-0.1.0b1/apps/tui/src/stui/adapter/events/logs_event_observer.py +179 -0
- skiller-0.1.0b1/apps/tui/src/stui/app.py +30 -0
- skiller-0.1.0b1/apps/tui/src/stui/di/__init__.py +1 -0
- skiller-0.1.0b1/apps/tui/src/stui/di/container.py +200 -0
- skiller-0.1.0b1/apps/tui/src/stui/di/strings.py +30 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/__init__.py +0 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/agent_port.py +47 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/event_models.py +302 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/event_port.py +37 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/installation_state_port.py +14 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/notify_action_port.py +25 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/run_port.py +75 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/runs_port.py +26 -0
- skiller-0.1.0b1/apps/tui/src/stui/port/waiting_port.py +22 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/__init__.py +0 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/action_open_url_view.py +110 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/agent_context_stats_view.py +196 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/autocomplete_view.py +83 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/console_screen.py +652 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/markdown.py +50 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/prompt.py +190 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/runs_table_view.py +250 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/screen_status_view.py +83 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/theme.py +384 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/__init__.py +55 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_assistant_message_view.py +27 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_final_assistant_message_view.py +19 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_step_final_output_view.py +26 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_system_notice_view.py +36 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_tool_call_view.py +34 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_tool_result_view.py +25 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/base.py +11 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/blank_line_view.py +16 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/collapsed_route_view.py +24 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/dispatch_error_view.py +27 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/info_view.py +19 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/intro_view.py +26 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/placeholder_view.py +20 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/render_transcript.py +285 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_ack_view.py +22 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_finished_view.py +20 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_output_view.py +22 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_resume_view.py +21 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_step_view.py +49 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_system_notice_view.py +64 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_waiting_input_view.py +21 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_waiting_webhook_view.py +36 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_error_view.py +33 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_notify_output_view.py +33 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_output_view.py +33 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_shell_output_view.py +33 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/user_input_view.py +34 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/view_helpers.py +297 -0
- skiller-0.1.0b1/apps/tui/src/stui/screen/transcript_log.py +13 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/__init__.py +2 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/agent_status_use_case.py +27 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/autocomplete_use_case.py +76 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/done_notify_action_use_case.py +37 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/event_state_use_case.py +186 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/event_transcript_mapper.py +490 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/interrupt_agent_turn_use_case.py +49 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/list_runs_use_case.py +84 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/move_completion_use_case.py +27 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/normalize_command_use_case.py +81 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/open_notify_action_use_case.py +47 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/project_agent_usage_use_case.py +46 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/project_notify_action_use_case.py +80 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/project_transcript_use_case.py +54 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/prompt_enter_use_case.py +35 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/run_command_use_case.py +89 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/run_event_context.py +40 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/select_runs_table_row_use_case.py +85 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/start_console_use_case.py +80 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/submit_waiting_input_use_case.py +72 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/toggle_agent_stats_use_case.py +60 -0
- skiller-0.1.0b1/apps/tui/src/stui/usecase/unsupported_input_use_case.py +37 -0
- skiller-0.1.0b1/apps/tui/src/stui/viewmodel/__init__.py +0 -0
- skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_event.py +14 -0
- skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_state.py +425 -0
- skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_use_cases.py +60 -0
- skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_viewmodel.py +327 -0
- skiller-0.1.0b1/apps/tui/src/stui/viewmodel/port_to_viewmodel.py +25 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_agent_adapter.py +143 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_log_event_adapter.py +721 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_notify_action_adapter.py +101 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_run_adapter.py +230 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_runs_adapter.py +72 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_waiting_adapter.py +72 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_default_events_port.py +170 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_default_installation_state_port.py +88 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_default_notify_action_port.py +75 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_default_run_port.py +22 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_default_runs_port.py +50 -0
- skiller-0.1.0b1/apps/tui/tests/adapter/test_logs_event_observer.py +346 -0
- skiller-0.1.0b1/apps/tui/tests/conftest.py +12 -0
- skiller-0.1.0b1/apps/tui/tests/flows/notify/notify.yaml +30 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_action_open_url_view.py +226 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_agent_context_stats_view.py +64 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_autocomplete_view.py +107 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_console_screen.py +105 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_console_screen_integration.py +1100 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_prompt.py +45 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_render_transcript.py +450 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_runs_table_view.py +219 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_screen_status_view.py +32 -0
- skiller-0.1.0b1/apps/tui/tests/screen/test_transcript_log.py +25 -0
- skiller-0.1.0b1/apps/tui/tests/support.py +215 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_agent_status_use_case.py +77 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_autocomplete_use_case.py +87 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_done_notify_action_use_case.py +82 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_event_state_use_case.py +388 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_event_transcript_mapper.py +810 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_interrupt_agent_turn_use_case.py +77 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_list_runs_use_case.py +101 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_move_completion_use_case.py +50 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_normalize_command_use_case.py +67 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_open_notify_action_use_case.py +128 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_project_agent_usage_use_case.py +60 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_project_notify_action_use_case.py +210 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_project_transcript_use_case.py +120 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_prompt_enter_use_case.py +62 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_run_command_use_case.py +279 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_run_event_context.py +27 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_select_runs_table_row_use_case.py +318 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_start_console_use_case.py +237 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_submit_waiting_input_use_case.py +298 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_toggle_agent_stats_use_case.py +65 -0
- skiller-0.1.0b1/apps/tui/tests/usecase/test_unsupported_input_use_case.py +55 -0
- skiller-0.1.0b1/apps/tui/tests/viewmodel/test_console_screen_viewmodel.py +1176 -0
- skiller-0.1.0b1/apps/tui/tests/viewmodel/test_port_to_viewmodel.py +49 -0
- skiller-0.1.0b1/packages/skiller/agents/ant/agent.yaml +35 -0
- skiller-0.1.0b1/packages/skiller/agents/ci/agent.json +49 -0
- skiller-0.1.0b1/packages/skiller/agents/ci/agent.yaml +32 -0
- skiller-0.1.0b1/packages/skiller/agents/ci/system.md +147 -0
- skiller-0.1.0b1/packages/skiller/agents/codex-auth/agent.yaml +83 -0
- skiller-0.1.0b1/packages/skiller/agents/codex-auth/codex_auth.py +477 -0
- skiller-0.1.0b1/packages/skiller/agents/kawa/agent.json +52 -0
- skiller-0.1.0b1/packages/skiller/agents/kawa/agent.yaml +32 -0
- skiller-0.1.0b1/packages/skiller/agents/kawa/system.md +23 -0
- skiller-0.1.0b1/packages/skiller/agents/llmconfig/agent.yaml +132 -0
- skiller-0.1.0b1/packages/skiller/agents/mono/agent.json +49 -0
- skiller-0.1.0b1/packages/skiller/agents/mono/agent.yaml +40 -0
- skiller-0.1.0b1/packages/skiller/agents/openai-auth/agent.yaml +84 -0
- skiller-0.1.0b1/packages/skiller/agents/openai-auth/openai_auth.py +670 -0
- skiller-0.1.0b1/packages/skiller/agents/pr/agent.yaml +37 -0
- skiller-0.1.0b1/packages/skiller/agents/steps/agent.yaml +57 -0
- skiller-0.1.0b1/packages/skiller/agents/whatsapp/agent.yaml +15 -0
- skiller-0.1.0b1/packages/skiller/docs/agent/agent-config.md +394 -0
- skiller-0.1.0b1/packages/skiller/docs/agent/agent-context.md +500 -0
- skiller-0.1.0b1/packages/skiller/docs/agent/agent-event.md +311 -0
- skiller-0.1.0b1/packages/skiller/docs/agent/agent-loop.md +125 -0
- skiller-0.1.0b1/packages/skiller/docs/architecture/architecture.md +199 -0
- skiller-0.1.0b1/packages/skiller/docs/architecture/code-style.md +199 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/command-guide.md +440 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/action.md +72 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/agent.md +145 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/catalogue.md +28 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/input.md +42 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/logs.md +152 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/resume.md +45 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/run.md +170 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/runs.md +72 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/server.md +104 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/status.md +163 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/commands/webhook.md +128 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/tool-cloudflared.md +160 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/tool-server.md +49 -0
- skiller-0.1.0b1/packages/skiller/docs/cli/tool-whatsapp.md +176 -0
- skiller-0.1.0b1/packages/skiller/docs/config/config.md +80 -0
- skiller-0.1.0b1/packages/skiller/docs/db/runtime-db-model.md +122 -0
- skiller-0.1.0b1/packages/skiller/docs/db/schema.md +319 -0
- skiller-0.1.0b1/packages/skiller/docs/dev/codex-auth-credentials.md +223 -0
- skiller-0.1.0b1/packages/skiller/docs/dev/openai-auth-local-callback.md +252 -0
- skiller-0.1.0b1/packages/skiller/docs/dev/revive-agent-run.md +195 -0
- skiller-0.1.0b1/packages/skiller/docs/dev/ruff-import-sorting-incident.md +45 -0
- skiller-0.1.0b1/packages/skiller/docs/events/context-model.md +346 -0
- skiller-0.1.0b1/packages/skiller/docs/events/event.md +595 -0
- skiller-0.1.0b1/packages/skiller/docs/flows/flow-checker.md +106 -0
- skiller-0.1.0b1/packages/skiller/docs/flows/flow-readiness-checker.md +104 -0
- skiller-0.1.0b1/packages/skiller/docs/flows/flow-schema.md +185 -0
- skiller-0.1.0b1/packages/skiller/docs/issues/agent-failure-retry-spike.md +97 -0
- skiller-0.1.0b1/packages/skiller/docs/issues/list +0 -0
- skiller-0.1.0b1/packages/skiller/docs/runtime/agent-architecture.md +107 -0
- skiller-0.1.0b1/packages/skiller/docs/runtime/execution-model.md +53 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/agent.md +361 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/assign.md +52 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/mcp.md +71 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/notify.md +123 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/send.md +39 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/shell.md +81 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/switch.md +33 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/wait_channel.md +73 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/wait_input.md +71 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/wait_webhook.md +66 -0
- skiller-0.1.0b1/packages/skiller/docs/steps/when.md +42 -0
- skiller-0.1.0b1/packages/skiller/docs/tool/agent-tool-dev.md +314 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/__main__.py +4 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/agent_runner.py +199 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/config/agent_step_mapper.py +66 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/config/output_truncator.py +25 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/config/step_config_reader.py +108 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/context/agent_context_manager.py +91 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/context/agent_context_publisher.py +180 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/event/agent_event_publisher.py +190 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/event/agent_event_truncator.py +133 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/llmodel/llm_model_manager.py +54 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/mapper/error_mapper.py +25 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/mapper/feedback.py +44 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/prompt/prompt_builder.py +162 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/runner_state.py +73 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/tools/agent_tool_executor.py +319 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/tools/tool_manager.py +204 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/tools/tool_manager_model.py +17 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agents/mapper.py +58 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/agents/service.py +24 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/query_mapper.py +17 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/query_service.py +77 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/executor.py +324 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/mapper.py +102 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/models.py +30 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/service.py +182 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/__init__.py +1 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/__init__.py +10 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/config.py +13 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/models.py +20 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/policy.py +72 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/runtime_config_mapper.py +47 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/tool.py +242 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/notify/__init__.py +6 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/notify/tool.py +58 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/__init__.py +9 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/config.py +14 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/models.py +12 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/policy.py +208 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/process_tool.py +162 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/runtime_config_mapper.py +70 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/agent/get_agent_stats.py +116 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/agent/interrupt_agent.py +55 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_agent_step.py +216 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_assign_step.py +69 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_mcp_step.py +118 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_notify_step.py +144 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_send_step.py +86 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_shell_step.py +214 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_switch_step.py +93 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_wait_channel_step.py +215 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_wait_input_step.py +155 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_wait_webhook_step.py +136 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_when_step.py +169 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/flow/flow_checker.py +603 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/flow/flow_readiness_checker.py +127 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/ingress/handle_channel.py +167 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/ingress/handle_input.py +106 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/ingress/handle_webhook.py +107 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_run.py +10 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_run_logs.py +23 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_run_status.py +10 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_runs.py +10 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_waiting_metadata.py +73 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/list_webhooks.py +16 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/render/render_current_step.py +99 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/render/render_mcp_config.py +274 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/append_runtime_event.py +40 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/bootstrap_runtime.py +12 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/complete_run.py +13 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/create_run.py +38 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/delete_run.py +41 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/fail_run.py +16 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/get_start_step.py +32 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/mark_notify_action_done.py +117 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/resume_run.py +31 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/sync_snapshot.py +130 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/webhook/register_webhook.py +86 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/webhook/remove_webhook.py +41 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/channel_mapper.py +43 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/input_mapper.py +33 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/service.py +64 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/webhook_mapper.py +138 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/di/__init__.py +3 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/di/container.py +402 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/di/llm_client_factory.py +41 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/action/action_model.py +96 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_config_model.py +47 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_config_port.py +13 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_config_validation_model.py +38 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_context_model.py +190 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_context_stats_port.py +18 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_context_store_port.py +59 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_llm_provider_model.py +106 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_loop_model.py +16 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_run_identity.py +14 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_run_model.py +11 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_stats_model.py +39 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/llm_client_resolver.py +9 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/llm_model.py +221 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/llm_port.py +7 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/event_model.py +366 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/runtime_event_store_port.py +52 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/webhook_registration_model.py +16 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/webhook_registry_port.py +25 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/mcp/mcp_config_model.py +13 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/mcp/mcp_port.py +32 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_context_model.py +70 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_list_item_model.py +31 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_model.py +71 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_query_port.py +12 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_status_runtime_model.py +14 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_store_port.py +51 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/runtime_bootstrap_port.py +5 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/steering_model.py +82 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/shared/policies.py +7 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/shared/policy_gate_port.py +5 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/shared/steering_port.py +9 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/current_step_model.py +30 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/run_step_model.py +103 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/runner_port.py +22 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/server_status_port.py +5 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/step_execution_model.py +330 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/step_execution_result_model.py +17 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/step_type.py +15 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/channel_sender_model.py +9 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/channel_sender_port.py +19 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_contract.py +192 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_execution_model.py +97 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_process_model.py +54 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_process_port.py +26 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_router_port.py +5 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/external_event_store_port.py +49 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/match_type.py +7 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/source_type.py +7 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/wait_store_port.py +41 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/wait_type.py +7 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/agent/agent_context_store.py +285 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/agent_config_mapper.py +363 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/agent_config_schema.py +83 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/json_agent_config.py +139 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/settings.py +201 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/settings_model.py +12 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_agent_context_datasource.py +430 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_agent_steering_store.py +75 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_external_event_store.py +205 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_repository.py +12 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_run_mapper.py +91 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_run_query_store.py +78 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_runtime_bootstrap.py +169 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_runtime_event_store.py +265 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_state_store.py +357 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_wait_store.py +202 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_webhook_registry.py +91 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/fake_llm.py +25 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/null_llm.py +14 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_codex_credentials.py +74 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_codex_responses_llm.py +107 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_llm.py +62 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_mapper.py +261 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_responses_llm.py +91 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_responses_mapper.py +257 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/skills/filesystem_skill_runner.py +276 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/channels/default_channel_sender.py +112 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/mcp/client.py +453 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/mcp/default_mcp.py +53 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/process/default_tool_process.py +174 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/webhooks/default_server_status.py +20 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/__init__.py +0 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/cli/__init__.py +0 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/cli/main.py +1131 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/runtime_controller.py +183 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/__init__.py +1 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/__init__.py +1 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/__init__.py +1 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/bridge/bridge.js +465 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/bridge/package.json +11 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/pair_service.py +539 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/process_service.py +434 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/server/__init__.py +1 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/server/__main__.py +19 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/server/app.py +197 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/server/launcher.py +96 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/server/process_service.py +245 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/__init__.py +1 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/__init__.py +29 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/ensure_service.py +241 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/login_service.py +281 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/process_service.py +419 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/workers/__init__.py +6 -0
- skiller-0.1.0b1/packages/skiller/src/skiller/local/workers/process_service.py +37 -0
- skiller-0.1.0b1/packages/skiller/tests/conftest.py +16 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_all.sh +90 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_assign.sh +21 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_codex_client.sh +144 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_mcp_stdio.sh +22 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_notify.sh +19 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_notify_link.sh +116 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_runs.sh +72 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_server.sh +97 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_shell.sh +63 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_switch.sh +21 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_wait_input.sh +33 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_wait_webhook.sh +45 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/cli_when.sh +19 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/assign_cli_e2e.yaml +19 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/notify_cli_e2e.yaml +10 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/notify_link_cli_e2e.yaml +28 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/shell_cli_e2e.yaml +13 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/switch_cli_e2e.yaml +29 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/wait_input_cli_e2e.yaml +14 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/wait_webhook_cli_e2e.yaml +16 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e/skills/when_cli_e2e.yaml +28 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/files-tool/agent.json +24 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/files-tool/agent.yaml +23 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/files-tool/run.sh +135 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/minimal/agent.yaml +17 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/minimal/run.sh +71 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/run_all.sh +95 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/fail-max-turn.yaml +19 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/fail-multi-tools.yaml +20 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/max-turn.yaml +19 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/multi-tools.yaml +20 -0
- skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/run.sh +161 -0
- skiller-0.1.0b1/packages/skiller/tests/helpers/agent_config.py +84 -0
- skiller-0.1.0b1/packages/skiller/tests/helpers/agent_runner.py +339 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/mcp/test_chrome_mcp_probe_integration.py +99 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/mcp/test_mcp_probe_integration.py +80 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/conftest.py +38 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/fixtures/mcp/test_file_mcp_server.py +200 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/fixtures/mcp/test_mcp_server.py +31 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_basic_skill_examples.py +459 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_basic_skill_examples_real_mcp.py +343 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_external_skill_file.py +690 -0
- skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_flow_checker_builtin_flows.py +25 -0
- skiller-0.1.0b1/packages/skiller/tests/prompts/A-shell-allowed-paths.md +31 -0
- skiller-0.1.0b1/packages/skiller/tests/prompts/B-multiple-shell-calls.md +24 -0
- skiller-0.1.0b1/packages/skiller/tests/prompts/C-tool-call-limit.md +39 -0
- skiller-0.1.0b1/packages/skiller/tests/prompts/D-shell-interrupt.md +32 -0
- skiller-0.1.0b1/packages/skiller/tests/prompts/E-max-turns.md +70 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/agents/test_ci_agent_config.py +64 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/agents/test_kawa_agent_config.py +69 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/agents/test_mono_agent_config.py +31 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/config/test_agent_step_mapper.py +102 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/config/test_output_truncator.py +31 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/config/test_step_config_reader.py +239 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/context/test_agent_context_manager.py +234 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/llmodel/test_llm_model_manager.py +101 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/prompt/test_prompt_builder.py +311 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_context_publisher.py +369 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_event_dispatcher.py +240 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_event_truncator.py +102 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_runner.py +990 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_error_mapper.py +54 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/tools/test_application_agent_tool_execution.py +717 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/tools/test_tool_manager.py +308 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_agent_service_mapper.py +82 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_channel_wait_mapper.py +37 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_input_wait_mapper.py +24 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_query_service.py +147 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_run_application_service.py +463 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_run_executor.py +685 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/test_webhook_wait_mapper.py +133 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_files_tool.py +339 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_notify_tool.py +37 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_shell_command_policy.py +172 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_shell_process_tool.py +155 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_complete_run.py +40 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_create_run.py +91 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_delete_run.py +63 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_agent_step.py +1064 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_assign_step.py +136 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_mcp_step.py +245 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_notify_step.py +286 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_send_step.py +138 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_shell_step.py +359 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_switch_step.py +159 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_wait_channel_step.py +236 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_wait_input_step.py +309 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_wait_webhook_step.py +263 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_when_step.py +189 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_fail_run.py +60 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_flow_checker.py +410 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_flow_readiness_checker.py +271 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_agent_stats.py +166 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_runs.py +75 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_start_step.py +94 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_waiting_metadata.py +97 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_handle_channel.py +194 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_handle_input.py +140 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_handle_webhook.py +146 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_interrupt_agent.py +83 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_mark_notify_action_done.py +186 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_render_current_step.py +243 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_render_mcp_config.py +661 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_sync_snapshot.py +207 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_webhook_registry_use_cases.py +159 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/conftest.py +30 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/di/test_container.py +99 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/domain/test_agent_config_model.py +96 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/domain/test_llm_model.py +96 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/domain/test_step_execution_model.py +183 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/config/test_json_agent_config.py +489 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/config/test_settings.py +152 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_agent_steering_store.py +69 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_external_event_store.py +113 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_runtime_bootstrap.py +77 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_runtime_event_store.py +324 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_fake_llm.py +21 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_codex_credentials.py +74 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_codex_responses_llm.py +233 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_llm.py +158 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_mapper.py +188 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_responses_llm.py +186 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_responses_mapper.py +296 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/mcp/test_default_mcp.py +44 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/mcp/test_mcp_client.py +182 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_agent_context_store.py +785 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_filesystem_skill_runner.py +283 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_sqlite_run_query_store.py +131 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_sqlite_state_store.py +599 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/tools/channels/test_default_channel_sender.py +101 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/tools/process/test_default_tool_process.py +265 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/interfaces/cli/test_main.py +1095 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/interfaces/test_runtime_controller.py +238 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/channels/whatsapp/test_pair_service.py +164 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/channels/whatsapp/test_whatsapp_process_service.py +143 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/server/test_app.py +287 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/server/test_launcher.py +92 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/server/test_server_process_service.py +111 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/tunnels/cloudflared/test_cloudflared_process_service.py +190 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/tunnels/cloudflared/test_ensure_service.py +121 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/tunnels/cloudflared/test_login_service.py +85 -0
- skiller-0.1.0b1/packages/skiller/tests/unit/local/workers/test_worker_process_service.py +72 -0
- skiller-0.1.0b1/pyproject.toml +60 -0
- skiller-0.1.0b1/scripts/ci/validate_pr_branch.py +70 -0
- skiller-0.1.0b1/scripts/ci/validate_release_pr.py +149 -0
- skiller-0.1.0b1/skills/agent_demo.yaml +35 -0
- skiller-0.1.0b1/skills/agent_tools.yaml +35 -0
- skiller-0.1.0b1/skills/basic_demo.yaml +30 -0
- skiller-0.1.0b1/skills/delay_test.yaml +46 -0
- skiller-0.1.0b1/skills/http_mcp_test.yaml +18 -0
- skiller-0.1.0b1/skills/notify_test.yaml +10 -0
- skiller-0.1.0b1/skills/pull_request.yaml +37 -0
- skiller-0.1.0b1/skills/repo_checks.yaml +35 -0
- skiller-0.1.0b1/skills/stdio_mcp_test.yaml +27 -0
- skiller-0.1.0b1/skills/story_router.yaml +67 -0
- skiller-0.1.0b1/skills/ui_progress_test.yaml +44 -0
- skiller-0.1.0b1/skills/wait_input_test.yaml +14 -0
- skiller-0.1.0b1/skills/whatsapp_demo.yaml +15 -0
- skiller-0.1.0b1/skills/whatsapp_send_demo.yaml +13 -0
- skiller-0.1.0b1/steps.yaml +57 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skiller-dev
|
|
3
|
+
description: Apply the preferred Skiller coding style when refactoring or adding code in this repository. Use when editing runtime services, use cases, ports, or supporting tests and you need code that is flat, explicit, contract-driven, and easy to read.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skiller Dev
|
|
7
|
+
|
|
8
|
+
Use this skill to keep Skiller code flat, explicit, and easy to maintain.
|
|
9
|
+
|
|
10
|
+
## Core Rules
|
|
11
|
+
|
|
12
|
+
- Follow the dependency rule: `interfaces -> application -> domain <- infrastructure`.
|
|
13
|
+
- Infrastructure may implement domain ports and use domain models, but must not orchestrate
|
|
14
|
+
other domain ports or coordinate business flows.
|
|
15
|
+
- Put ports in `domain` under their feature directory, never in `application`.
|
|
16
|
+
- Keep services thin. Orchestrate; do not persist state directly from the service.
|
|
17
|
+
- Put state changes and side effects in dedicated use cases.
|
|
18
|
+
- Prefer closed contracts with enums for finite domains like statuses and step types.
|
|
19
|
+
- Keep result objects minimal. Prefer `status + payload + error` over many optional fields.
|
|
20
|
+
- Prefer typed contracts at port boundaries. Do not model stable operations as long scalar
|
|
21
|
+
parameter lists or generic `dict[str, object]` bags when the domain concept is known.
|
|
22
|
+
- Prefer predictive flow over defensive flow. If a case is expected in normal execution,
|
|
23
|
+
model it in the contract or result type instead of rediscovering it through scattered
|
|
24
|
+
`None` checks or generic exceptions.
|
|
25
|
+
- Do not make dependencies or fields optional by default. Use `| None` only when absence is
|
|
26
|
+
a real domain state or a boundary genuinely may not provide the value.
|
|
27
|
+
- Avoid adding `__init__.py` files by default. Use namespace packages unless a package needs
|
|
28
|
+
real initialization logic, explicit re-exports, or tooling compatibility that requires it.
|
|
29
|
+
- Trust the contract of a use case. Do not add defensive checks for states that should be impossible.
|
|
30
|
+
- Prefer one clear error message over many overly specific status variants.
|
|
31
|
+
- Do not hide non-trivial preparation inside constructor or function-call parameters. Use explicit
|
|
32
|
+
local variables; do not create private helpers for one or two simple statements unless asked.
|
|
33
|
+
- Do not put architectural responsibility in large top-level functions. If a function coordinates
|
|
34
|
+
dependencies, owns a workflow, parses a whole external contract, or keeps growing, model it as an
|
|
35
|
+
object with a clear role such as adapter, mapper, resolver, manager, use case, store, or tool.
|
|
36
|
+
|
|
37
|
+
## Read By Need
|
|
38
|
+
|
|
39
|
+
- For readability and control-flow rules, read `packages/skiller/docs/architecture/code-style.md`.
|
|
40
|
+
- For architecture boundaries and allowed dependencies, read `packages/skiller/docs/architecture/architecture.md`.
|
|
41
|
+
- For runtime patterns used in this repo, read `SKILL.md -> references/runtime-patterns.md`.
|
|
42
|
+
- For test taxonomy and what counts as unit/integration/e2e here, read `SKILL.md -> references/testing-rules.md`.
|
|
43
|
+
- For the general pre-commit checklist used in this repo, read `SKILL.md -> references/pre-commit-checklist.md`.
|
|
44
|
+
- For the documented feature and release branch flow of this repo, read `SKILL.md -> references/workflow.md`.
|
|
45
|
+
- For functional runtime rules around waiting, resume, and persisted external events, prefer `SKILL.md -> references/runtime-patterns.md`.
|
|
46
|
+
|
|
47
|
+
## Sandbox Execution
|
|
48
|
+
|
|
49
|
+
- Do not assume `pytest` is available in the global `PATH`.
|
|
50
|
+
- In this repo, run tests with `./.venv/bin/pytest ...`.
|
|
51
|
+
- If you prefer activation first, use `source .venv/bin/activate` and then `pytest ...`.
|
|
52
|
+
- For ad hoc Python commands with local imports, use `PYTHONPATH=src python3 ...`.
|
|
53
|
+
- When reporting verification, include the exact command so the next agent can repeat it without rediscovering the environment.
|
|
54
|
+
|
|
55
|
+
## Release Workflow
|
|
56
|
+
|
|
57
|
+
Use the documented repo flow in `references/workflow.md` unless the user says otherwise.
|
|
58
|
+
- Treat the `[Agent]`, `[User]`, `[Admin]`, and `[Workflow]` labels in `references/workflow.md` as the source of truth for responsibilities.
|
|
59
|
+
|
|
60
|
+
## Default Checklist
|
|
61
|
+
|
|
62
|
+
- Is the control flow flat?
|
|
63
|
+
- Are statuses and types modeled as enums when appropriate?
|
|
64
|
+
- Does each use case have one clear responsibility?
|
|
65
|
+
- Is the service only coordinating use cases?
|
|
66
|
+
- Would a new reader understand the happy path first?
|
|
67
|
+
- Are constructor and function-call parameters simple names instead of inline transformations?
|
|
68
|
+
- Are invalid cases reported with one clear message?
|
|
69
|
+
- If behavior or step contracts changed, did you review the affected docs, especially `docs/steps/*` and `docs/guia_creacion_skills.md`?
|
|
70
|
+
- If the task involves integration or release prep, did you follow `references/workflow.md` instead of an older manual flow?
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Pre-Commit Checklist
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
- The change solves one clear thing.
|
|
6
|
+
- The commit does not mix unrelated work without a reason.
|
|
7
|
+
|
|
8
|
+
## Code
|
|
9
|
+
|
|
10
|
+
- The touched code compiles.
|
|
11
|
+
- Contracts are coherent.
|
|
12
|
+
- Old names or stale concepts are not left behind.
|
|
13
|
+
- No personal paths or machine-local assumptions leak into the repo.
|
|
14
|
+
|
|
15
|
+
## Tests
|
|
16
|
+
|
|
17
|
+
- The right test level covers the change.
|
|
18
|
+
- Do not add redundant tests.
|
|
19
|
+
- If a scenario is already covered in `integration`, do not duplicate it in `e2e`.
|
|
20
|
+
- `e2e` tests must justify their cost.
|
|
21
|
+
|
|
22
|
+
## Tree Hygiene
|
|
23
|
+
|
|
24
|
+
- No `__pycache__`
|
|
25
|
+
- No temporary files
|
|
26
|
+
- No deleted tests half-replaced by new ones
|
|
27
|
+
- No stale references to removed folders or old taxonomy
|
|
28
|
+
|
|
29
|
+
## Docs
|
|
30
|
+
|
|
31
|
+
- Update only the docs that really changed.
|
|
32
|
+
- If the change alters step behavior or visible runtime contracts, review and update `docs/steps/*` and `docs/guia_creacion_skills.md`.
|
|
33
|
+
- Do not duplicate living rules across many files.
|
|
34
|
+
- Keep stable rules in the skill references when possible.
|
|
35
|
+
- If you detect duplicated rules across skill files, docs, or checklists, prefer consolidating them into one stable source and leave only short pointers elsewhere.
|
|
36
|
+
|
|
37
|
+
## Operational Risk
|
|
38
|
+
|
|
39
|
+
- Call out any manual step the user must know.
|
|
40
|
+
- Example: "recreate the DB because the schema changed".
|
|
41
|
+
|
|
42
|
+
## Final Check
|
|
43
|
+
|
|
44
|
+
- `git status` is understandable.
|
|
45
|
+
- The commit can be explained in one sentence.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Runtime Patterns
|
|
2
|
+
|
|
3
|
+
## Current Runtime Flow
|
|
4
|
+
|
|
5
|
+
- `start_run` -> `StartRunUseCase`
|
|
6
|
+
- loop -> `RenderCurrentStepUseCase`
|
|
7
|
+
- `READY + assign` -> `ExecuteAssignStepUseCase`
|
|
8
|
+
- `READY + notify` -> `ExecuteNotifyStepUseCase`
|
|
9
|
+
- `READY + llm_prompt` -> `ExecuteLlmPromptStepUseCase`
|
|
10
|
+
- `READY + mcp` -> `RenderMcpConfigUseCase` -> `ExecuteMcpStepUseCase`
|
|
11
|
+
- `READY + wait_webhook` -> `ExecuteWaitWebhookStepUseCase`
|
|
12
|
+
- `DONE` -> `CompleteRunUseCase`
|
|
13
|
+
- `INVALID_*` or error -> `FailRunUseCase`
|
|
14
|
+
|
|
15
|
+
## Webhook Runtime Flow
|
|
16
|
+
|
|
17
|
+
- webhook input arrives already normalized
|
|
18
|
+
- `HandleWebhookUseCase` persists the webhook and returns matching `run_ids`
|
|
19
|
+
- `ResumeRunUseCase` marks a waiting run as `RUNNING`
|
|
20
|
+
- the service re-enters `_run_steps_loop(run_id)`
|
|
21
|
+
- `ExecuteWaitWebhookStepUseCase` is the owner of leaving the wait:
|
|
22
|
+
- if no matching webhook event exists, it leaves the run in `WAITING`
|
|
23
|
+
- if the event exists, it writes `results[step_id]`, advances the step, and continues the loop
|
|
24
|
+
|
|
25
|
+
## Waiting Semantics
|
|
26
|
+
|
|
27
|
+
- `wait_webhook` is not consumed when the run first enters `WAITING`
|
|
28
|
+
- while waiting, `current_step` stays on the same `wait_webhook` step
|
|
29
|
+
- the step is only consumed once a matching `webhook + key` event exists
|
|
30
|
+
- the same waiting step owns resolving itself once the matching event exists
|
|
31
|
+
- the webhook must be persisted before any attempt to resume the run
|
|
32
|
+
- `wait_webhook` must survive process restarts and machine shutdowns because its state lives in persistence
|
|
33
|
+
- `webhook receive` must return a minimal operational response:
|
|
34
|
+
- `accepted`
|
|
35
|
+
- `duplicate`
|
|
36
|
+
- `webhook`
|
|
37
|
+
- `key`
|
|
38
|
+
- `matched_runs`
|
|
39
|
+
- if `run --start-webhooks` does not end in `WAITING`, the `webhooks` process must not be started
|
|
40
|
+
- if `run --start-webhooks` ends in `WAITING`, the system must try to start the `webhooks` process and fail clearly if it cannot
|
|
41
|
+
- the minimal `webhooks` process must expose:
|
|
42
|
+
- `GET /health`
|
|
43
|
+
- `POST /webhooks/{webhook}/{key}`
|
|
44
|
+
|
|
45
|
+
## Contract Style
|
|
46
|
+
|
|
47
|
+
- `RenderCurrentStepUseCase` returns a minimal result:
|
|
48
|
+
- `status`
|
|
49
|
+
- `next_step` only when `READY`
|
|
50
|
+
- `RenderMcpConfigUseCase` returns a minimal result:
|
|
51
|
+
- `status`
|
|
52
|
+
- `mcp_config`
|
|
53
|
+
- `error`
|
|
54
|
+
- `ResumeRunUseCase` returns an explicit result:
|
|
55
|
+
- `RESUMED`
|
|
56
|
+
- `RUN_NOT_FOUND`
|
|
57
|
+
- `NOT_WAITING`
|
|
58
|
+
|
|
59
|
+
## Use Case Naming
|
|
60
|
+
|
|
61
|
+
- Prefer explicit names:
|
|
62
|
+
- `RenderMcpConfigUseCase`
|
|
63
|
+
- `ExecuteMcpStepUseCase`
|
|
64
|
+
- `ExecuteNotifyStepUseCase`
|
|
65
|
+
- `ExecuteWaitWebhookStepUseCase`
|
|
66
|
+
- `HandleWebhookUseCase`
|
|
67
|
+
- `ResumeRunUseCase`
|
|
68
|
+
- `CompleteRunUseCase`
|
|
69
|
+
- `FailRunUseCase`
|
|
70
|
+
|
|
71
|
+
- Avoid vague names when the code is really rendering, executing, completing, or failing something.
|
|
72
|
+
|
|
73
|
+
## Style Intention
|
|
74
|
+
|
|
75
|
+
- Prepare data in one step.
|
|
76
|
+
- Execute it in the next step.
|
|
77
|
+
- Keep the loop declarative.
|
|
78
|
+
- Keep invalid cases short and explicit.
|
|
79
|
+
- Avoid use case -> use case chains and callback-driven runtime flow.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Testing Rules
|
|
2
|
+
|
|
3
|
+
## Test Types
|
|
4
|
+
|
|
5
|
+
- `unit`
|
|
6
|
+
- tests one piece in isolation
|
|
7
|
+
- no real infrastructure
|
|
8
|
+
- no external process
|
|
9
|
+
- no real network
|
|
10
|
+
- no real database
|
|
11
|
+
|
|
12
|
+
- `integration`
|
|
13
|
+
- crosses real components of the system
|
|
14
|
+
- may use fixtures
|
|
15
|
+
- may use subprocesses
|
|
16
|
+
- may use a temporary real database
|
|
17
|
+
- may use local HTTP servers or test MCP servers
|
|
18
|
+
|
|
19
|
+
- `e2e`
|
|
20
|
+
- enters through a real system interface
|
|
21
|
+
- typically CLI or HTTP
|
|
22
|
+
- no infrastructure fixtures from the repo
|
|
23
|
+
- validates an observable final result
|
|
24
|
+
- keep these few and high-value
|
|
25
|
+
- treat them as manual operator smoke tests, not exhaustive behavioral tests
|
|
26
|
+
|
|
27
|
+
## Classification Rule
|
|
28
|
+
|
|
29
|
+
- If a test needs infrastructure fixtures, it is not `e2e`.
|
|
30
|
+
- If a scenario is already well covered in `integration`, do not duplicate it in `e2e`.
|
|
31
|
+
- In `e2e`, less is more.
|
|
32
|
+
|
|
33
|
+
## Current Repo Intent
|
|
34
|
+
|
|
35
|
+
- Prefer one script per operator flow under `tests/e2e/cli_*.sh`.
|
|
36
|
+
- Isolate each run with a temporary DB via `AGENT_DB_PATH`.
|
|
37
|
+
- Execute the real runtime entrypoint with `PYTHONPATH=src ... -m skiller`.
|
|
38
|
+
- Assert a small final JSON contract such as `run_id`, `status`, and only the minimum extra fields needed for the flow.
|
|
39
|
+
- Do not assert internal persistence details, event payloads, or intermediate state if `integration` already covers them.
|
|
40
|
+
- Use `SKIPPED` instead of failing when the flow depends on external credentials or provider access that may not exist locally.
|
|
41
|
+
- Reserve multi-command E2E flows for genuinely operational paths such as wait/resume.
|
|
42
|
+
- `notify`, `assign`, `switch`, `when`, `wait_webhook`, and `llm_prompt` through CLI are valid manual operator flows in this repo.
|
|
43
|
+
- `llm_prompt` CLI remains opt-in when it depends on real provider credentials.
|
|
44
|
+
- `stdio mcp` through CLI is part of the manual CLI coverage in this repo.
|
|
45
|
+
- MCP with test servers or repo fixtures belongs to `integration`.
|
|
46
|
+
- Manual CLI wrappers live in `tests/e2e/cli_*.sh`.
|
|
47
|
+
- `tests/e2e/cli_all.sh` is the manual aggregator for those flows.
|
|
48
|
+
- When adding a new runtime step intended for real usage, add at least one `cli_<step>.sh` flow and register it in `cli_all.sh`.
|
|
49
|
+
|
|
50
|
+
## Placement
|
|
51
|
+
|
|
52
|
+
- `tests/unit/...`
|
|
53
|
+
- `tests/integration/...`
|
|
54
|
+
- `tests/e2e/...`
|
|
55
|
+
|
|
56
|
+
Keep fixtures near the integration tests that use them. Do not keep infrastructure fixtures under `tests/e2e/`.
|
|
57
|
+
Small YAML skills used only by manual CLI wrappers may live under `tests/e2e/skills/`.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Repo Workflow
|
|
2
|
+
|
|
3
|
+
Use this repo flow unless the user says otherwise.
|
|
4
|
+
|
|
5
|
+
## Feature Workflow
|
|
6
|
+
|
|
7
|
+
1. `[Agent, User]` Work on `feature/<topic>` from `main`.
|
|
8
|
+
2. `[Agent]` Implement the feature on that branch.
|
|
9
|
+
3. `[Agent]` Validate locally with the repo commands:
|
|
10
|
+
- `./.venv/bin/ruff check .`
|
|
11
|
+
- `./.venv/bin/pytest`
|
|
12
|
+
- `./.venv/bin/python -m hatchling build`
|
|
13
|
+
4. `[Agent]` Make sure the working tree is intentional before rewriting history.
|
|
14
|
+
- `git status -sb` must be understandable.
|
|
15
|
+
- If there are accidental unstaged changes, resolve them before the squash.
|
|
16
|
+
5. `[Agent]` Squash the branch into one clean commit on top of `main`.
|
|
17
|
+
6. `[Agent]` Verify the branch compares against `main` as exactly one commit.
|
|
18
|
+
- `git rev-list --count main..HEAD` must return `1`.
|
|
19
|
+
- `git log --oneline main..HEAD` must show the single PR commit.
|
|
20
|
+
7. `[Agent]` If the branch history changed, update the remote branch.
|
|
21
|
+
- Use `git push --force-with-lease origin feature/<topic>` after a squash or other rewrite.
|
|
22
|
+
8. `[Agent]` Open the PR from `feature/<topic>` into `main` using `skiller run pr` with explicit inputs.
|
|
23
|
+
9. `[Workflow]` The `Feature PR` workflow validates:
|
|
24
|
+
- branch base is `main`
|
|
25
|
+
- branch name starts with `feature/`
|
|
26
|
+
- branch compares as one commit directly on top of `main`
|
|
27
|
+
- `ruff`
|
|
28
|
+
- `pytest`
|
|
29
|
+
- package build
|
|
30
|
+
10. `[User]` Review and approve the PR.
|
|
31
|
+
11. `[Admin]` Merge the PR into `main`.
|
|
32
|
+
|
|
33
|
+
## Release Workflow
|
|
34
|
+
|
|
35
|
+
1. `[Agent, User]` Create `release/<version>` from `main`.
|
|
36
|
+
2. `[Agent]` Update `project.version` in `pyproject.toml`.
|
|
37
|
+
3. `[Agent]` Update `CHANGELOG.md` with the release summary.
|
|
38
|
+
4. `[Agent]` Close the changelog entry as `## <version> - <date>` and reset `## Unreleased`.
|
|
39
|
+
5. `[Agent]` Validate locally with the repo commands:
|
|
40
|
+
- `./.venv/bin/ruff check .`
|
|
41
|
+
- `./.venv/bin/pytest`
|
|
42
|
+
- `./.venv/bin/python -m hatchling build`
|
|
43
|
+
6. `[Agent]` Make sure the working tree is intentional before rewriting history.
|
|
44
|
+
- `git status -sb` must be understandable.
|
|
45
|
+
7. `[Agent]` Squash the branch into one clean commit on top of `main`.
|
|
46
|
+
8. `[Agent]` Verify the branch compares against `main` as exactly one commit.
|
|
47
|
+
- `git rev-list --count main..HEAD` must return `1`.
|
|
48
|
+
9. `[Agent]` Verify the release branch changes only:
|
|
49
|
+
- `pyproject.toml`
|
|
50
|
+
- `CHANGELOG.md`
|
|
51
|
+
10. `[Agent]` If the branch history changed, update the remote branch.
|
|
52
|
+
- Use `git push --force-with-lease origin release/<version>` after a squash or other rewrite.
|
|
53
|
+
11. `[Agent]` Open the PR from `release/<version>` into `main` using `skiller run pr` with explicit inputs.
|
|
54
|
+
12. `[Workflow]` The `Release PR` workflow validates:
|
|
55
|
+
- branch base is `main`
|
|
56
|
+
- branch name starts with `release/`
|
|
57
|
+
- branch compares as one commit directly on top of `main`
|
|
58
|
+
- only `pyproject.toml` and `CHANGELOG.md` changed
|
|
59
|
+
- `CHANGELOG.md` has a closed section for `<version>`
|
|
60
|
+
- `CHANGELOG.md` resets `Unreleased`
|
|
61
|
+
- `project.version` in `pyproject.toml` matches `<version>`
|
|
62
|
+
- `ruff`
|
|
63
|
+
- `pytest`
|
|
64
|
+
- package build
|
|
65
|
+
13. `[User]` Review and approve the PR.
|
|
66
|
+
14. `[Admin]` Merge the PR into `main`.
|
|
67
|
+
15. `[Workflow]` After merge, CI creates the tag `v<version>` on the merged commit.
|
|
68
|
+
|
|
69
|
+
## PR Command
|
|
70
|
+
|
|
71
|
+
The internal `pr` agent does not infer repo metadata or PR fields by itself.
|
|
72
|
+
Pass the inputs explicitly with `--arg`.
|
|
73
|
+
|
|
74
|
+
Feature PR template:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
./.venv/bin/skiller run pr \
|
|
78
|
+
--arg owner=<github-owner> \
|
|
79
|
+
--arg repo=<github-repo> \
|
|
80
|
+
--arg head=feature/<topic> \
|
|
81
|
+
--arg base=main \
|
|
82
|
+
--arg title='<commit-or-pr-title>' \
|
|
83
|
+
--arg body='<short summary and validation>'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Release PR template:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
./.venv/bin/skiller run pr \
|
|
90
|
+
--arg owner=<github-owner> \
|
|
91
|
+
--arg repo=<github-repo> \
|
|
92
|
+
--arg head=release/<version> \
|
|
93
|
+
--arg base=main \
|
|
94
|
+
--arg title='release: <version>' \
|
|
95
|
+
--arg body='<release summary and validation>'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Practical notes:
|
|
99
|
+
- Derive `owner` and `repo` from `git remote get-url origin` if needed.
|
|
100
|
+
- If the branch was renamed for workflow compliance, push the new branch before opening the PR.
|
|
101
|
+
- If the old remote branch is no longer needed after a rename, delete it explicitly.
|
|
102
|
+
- If `pr` fails with unresolved placeholders such as `{{inputs.owner}}`, rerun it with explicit `--arg` inputs.
|
|
103
|
+
|
|
104
|
+
## Rules
|
|
105
|
+
|
|
106
|
+
- Do not use a manual release workflow on `main`; that flow is obsolete.
|
|
107
|
+
- Do not update `CHANGELOG.md` on feature branches unless the user explicitly asks for it.
|
|
108
|
+
- Do not open a release PR with extra file changes.
|
|
109
|
+
- Do not leave a feature or release branch as multiple commits when the workflow requires one clean commit.
|
|
110
|
+
- Do not open a PR from a branch whose name does not match the required prefix.
|
|
111
|
+
- Do not assume a local squash is enough; after rewriting history, verify the remote branch too.
|
|
112
|
+
- Do not read or inspect tokens, secrets, or `.env` contents directly.
|
|
113
|
+
- Use trusted repo commands that consume credentials implicitly for their normal operation, for example `skiller run pr`.
|
|
114
|
+
- If a trusted repo command depends on authenticated environment that is not available in the sandbox, ask permission and run that command outside the sandbox instead of trying it inside the sandbox first.
|
|
115
|
+
- Do not use ad hoc scripts or generic tooling around credentials when a trusted repo command already exists for the task.
|
|
116
|
+
- If a trusted repo command cannot authenticate because the required environment is missing, report that as a blocker.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
AGENT_DB_PATH=dev-runtime.db
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Feature PR
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
types:
|
|
8
|
+
- opened
|
|
9
|
+
- synchronize
|
|
10
|
+
- reopened
|
|
11
|
+
- ready_for_review
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
validate:
|
|
18
|
+
if: startsWith(github.event.pull_request.head.ref, 'feature/')
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout PR head
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
with:
|
|
25
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.11"
|
|
32
|
+
|
|
33
|
+
- name: Install dependencies
|
|
34
|
+
run: |
|
|
35
|
+
python -m pip install --upgrade pip
|
|
36
|
+
python -m pip install -e .[dev] build
|
|
37
|
+
|
|
38
|
+
- name: Validate branch shape
|
|
39
|
+
env:
|
|
40
|
+
GITHUB_BASE_REF: ${{ github.base_ref }}
|
|
41
|
+
GITHUB_HEAD_REF: ${{ github.head_ref }}
|
|
42
|
+
run: |
|
|
43
|
+
python scripts/ci/validate_pr_branch.py \
|
|
44
|
+
--base-ref "$GITHUB_BASE_REF" \
|
|
45
|
+
--expected-base "main" \
|
|
46
|
+
--head-ref "$GITHUB_HEAD_REF" \
|
|
47
|
+
--head-prefix "feature/"
|
|
48
|
+
|
|
49
|
+
- name: Run ruff
|
|
50
|
+
run: python -m ruff check packages/skiller/src apps/tui/src packages/skiller/tests apps/tui/tests
|
|
51
|
+
|
|
52
|
+
- name: Run pytest
|
|
53
|
+
run: python -m pytest
|
|
54
|
+
|
|
55
|
+
- name: Build package
|
|
56
|
+
run: python -m build
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
ref:
|
|
10
|
+
description: "Git ref to publish (for example: v1.0.0-alpha.8)"
|
|
11
|
+
required: true
|
|
12
|
+
type: string
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
id-token: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
publish:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
environment: pypi
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout tagged commit
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
ref: ${{ github.event_name == 'workflow_dispatch' && inputs.ref || github.ref }}
|
|
27
|
+
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.11"
|
|
32
|
+
|
|
33
|
+
- name: Build package
|
|
34
|
+
run: |
|
|
35
|
+
python -m pip install --upgrade pip build
|
|
36
|
+
python -m build
|
|
37
|
+
|
|
38
|
+
- name: Publish to PyPI
|
|
39
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
40
|
+
with:
|
|
41
|
+
verify-metadata: false
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
name: Release PR
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
types:
|
|
8
|
+
- opened
|
|
9
|
+
- synchronize
|
|
10
|
+
- reopened
|
|
11
|
+
- ready_for_review
|
|
12
|
+
- closed
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
validate:
|
|
19
|
+
if: github.event.action != 'closed' && startsWith(github.event.pull_request.head.ref, 'release/')
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout PR head
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
|
|
29
|
+
- name: Set up Python
|
|
30
|
+
uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: "3.11"
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: |
|
|
36
|
+
python -m pip install --upgrade pip
|
|
37
|
+
python -m pip install -e .[dev] build
|
|
38
|
+
|
|
39
|
+
- name: Validate branch shape
|
|
40
|
+
env:
|
|
41
|
+
GITHUB_BASE_REF: ${{ github.base_ref }}
|
|
42
|
+
GITHUB_HEAD_REF: ${{ github.head_ref }}
|
|
43
|
+
run: |
|
|
44
|
+
python scripts/ci/validate_pr_branch.py \
|
|
45
|
+
--base-ref "$GITHUB_BASE_REF" \
|
|
46
|
+
--expected-base "main" \
|
|
47
|
+
--head-ref "$GITHUB_HEAD_REF" \
|
|
48
|
+
--head-prefix "release/"
|
|
49
|
+
|
|
50
|
+
- name: Validate release metadata
|
|
51
|
+
env:
|
|
52
|
+
GITHUB_BASE_REF: ${{ github.base_ref }}
|
|
53
|
+
GITHUB_HEAD_REF: ${{ github.head_ref }}
|
|
54
|
+
run: |
|
|
55
|
+
python scripts/ci/validate_release_pr.py \
|
|
56
|
+
--base-ref "$GITHUB_BASE_REF" \
|
|
57
|
+
--expected-base "main" \
|
|
58
|
+
--head-ref "$GITHUB_HEAD_REF"
|
|
59
|
+
|
|
60
|
+
- name: Run ruff
|
|
61
|
+
run: python -m ruff check packages/skiller/src apps/tui/src packages/skiller/tests apps/tui/tests
|
|
62
|
+
|
|
63
|
+
- name: Run pytest
|
|
64
|
+
run: python -m pytest
|
|
65
|
+
|
|
66
|
+
- name: Build package
|
|
67
|
+
run: python -m build
|
|
68
|
+
|
|
69
|
+
create_tag:
|
|
70
|
+
if: github.event.action == 'closed' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/')
|
|
71
|
+
runs-on: ubuntu-latest
|
|
72
|
+
|
|
73
|
+
steps:
|
|
74
|
+
- name: Checkout merged commit
|
|
75
|
+
uses: actions/checkout@v4
|
|
76
|
+
with:
|
|
77
|
+
ref: ${{ github.event.pull_request.merge_commit_sha }}
|
|
78
|
+
fetch-depth: 0
|
|
79
|
+
|
|
80
|
+
- name: Ensure tag does not already exist
|
|
81
|
+
env:
|
|
82
|
+
RELEASE_TAG: v${{ github.event.pull_request.head.ref }}
|
|
83
|
+
run: |
|
|
84
|
+
release_version="${RELEASE_TAG#vrelease/}"
|
|
85
|
+
release_tag="v${release_version}"
|
|
86
|
+
if git rev-parse "$release_tag" >/dev/null 2>&1; then
|
|
87
|
+
echo "tag already exists: $release_tag" >&2
|
|
88
|
+
exit 1
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
- name: Create and push tag
|
|
92
|
+
env:
|
|
93
|
+
RELEASE_BRANCH: ${{ github.event.pull_request.head.ref }}
|
|
94
|
+
MERGE_COMMIT_SHA: ${{ github.event.pull_request.merge_commit_sha }}
|
|
95
|
+
run: |
|
|
96
|
+
release_version="${RELEASE_BRANCH#release/}"
|
|
97
|
+
release_tag="v${release_version}"
|
|
98
|
+
git config user.name "github-actions[bot]"
|
|
99
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
100
|
+
git tag "$release_tag" "$MERGE_COMMIT_SHA"
|
|
101
|
+
git push origin "$release_tag"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Python bytecode
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# Packaging / build artifacts
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
.eggs/
|
|
10
|
+
*.egg
|
|
11
|
+
*.egg-info/
|
|
12
|
+
pip-wheel-metadata/
|
|
13
|
+
|
|
14
|
+
# Virtual environments
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
env/
|
|
18
|
+
ENV/
|
|
19
|
+
|
|
20
|
+
# Tool caches
|
|
21
|
+
.pytest_cache/
|
|
22
|
+
.ruff_cache/
|
|
23
|
+
.mypy_cache/
|
|
24
|
+
.pyre/
|
|
25
|
+
.pytype/
|
|
26
|
+
.hypothesis/
|
|
27
|
+
.tox/
|
|
28
|
+
.nox/
|
|
29
|
+
|
|
30
|
+
# Coverage
|
|
31
|
+
.coverage
|
|
32
|
+
.coverage.*
|
|
33
|
+
coverage.xml
|
|
34
|
+
htmlcov/
|
|
35
|
+
|
|
36
|
+
# Notebook / editor / OS
|
|
37
|
+
.ipynb_checkpoints/
|
|
38
|
+
.DS_Store
|
|
39
|
+
.idea/
|
|
40
|
+
.vscode/
|
|
41
|
+
|
|
42
|
+
# Environment files
|
|
43
|
+
.env
|
|
44
|
+
.env.*
|
|
45
|
+
!.env.development
|
|
46
|
+
|
|
47
|
+
# Runtime artifacts
|
|
48
|
+
*.db
|
|
49
|
+
*.sqlite3
|
|
50
|
+
logs/
|
|
51
|
+
.tmp/
|
|
52
|
+
docs-legacy/
|
|
53
|
+
docs/spikes/
|
|
54
|
+
|
|
55
|
+
# Local JS bridge artifacts
|
|
56
|
+
src/skiller/local/channels/whatsapp/bridge/node_modules/
|
|
57
|
+
src/skiller/local/channels/whatsapp/bridge/package-lock.json
|
|
58
|
+
packages/skiller/src/skiller/local/channels/whatsapp/bridge/node_modules/
|
|
59
|
+
packages/skiller/src/skiller/local/channels/whatsapp/bridge/package-lock.json
|
|
60
|
+
legacy/
|
|
61
|
+
|
|
62
|
+
apps/tui/docs/todo
|