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.
Files changed (591) hide show
  1. skiller-0.1.0b1/.codex/skills/skiller-dev/SKILL.md +70 -0
  2. skiller-0.1.0b1/.codex/skills/skiller-dev/agents/openai.yaml +4 -0
  3. skiller-0.1.0b1/.codex/skills/skiller-dev/references/pre-commit-checklist.md +45 -0
  4. skiller-0.1.0b1/.codex/skills/skiller-dev/references/runtime-patterns.md +79 -0
  5. skiller-0.1.0b1/.codex/skills/skiller-dev/references/testing-rules.md +57 -0
  6. skiller-0.1.0b1/.codex/skills/skiller-dev/references/workflow.md +116 -0
  7. skiller-0.1.0b1/.env.development +1 -0
  8. skiller-0.1.0b1/.github/workflows/feature.yml +56 -0
  9. skiller-0.1.0b1/.github/workflows/publish.yml +41 -0
  10. skiller-0.1.0b1/.github/workflows/release.yml +101 -0
  11. skiller-0.1.0b1/.gitignore +62 -0
  12. skiller-0.1.0b1/CHANGELOG.md +115 -0
  13. skiller-0.1.0b1/LICENSE +176 -0
  14. skiller-0.1.0b1/PKG-INFO +232 -0
  15. skiller-0.1.0b1/README.md +212 -0
  16. skiller-0.1.0b1/apps/tui/docs/architecture.md +172 -0
  17. skiller-0.1.0b1/apps/tui/docs/rules-code-style.md +19 -0
  18. skiller-0.1.0b1/apps/tui/docs/status-view.md +135 -0
  19. skiller-0.1.0b1/apps/tui/docs/transcript-spec.md +399 -0
  20. skiller-0.1.0b1/apps/tui/docs/usecase-definition.md +247 -0
  21. skiller-0.1.0b1/apps/tui/pyproject.toml +21 -0
  22. skiller-0.1.0b1/apps/tui/src/stui/__init__.py +3 -0
  23. skiller-0.1.0b1/apps/tui/src/stui/__main__.py +4 -0
  24. skiller-0.1.0b1/apps/tui/src/stui/adapter/__init__.py +0 -0
  25. skiller-0.1.0b1/apps/tui/src/stui/adapter/agent_interrupt_mapper.py +49 -0
  26. skiller-0.1.0b1/apps/tui/src/stui/adapter/agent_stats_mapper.py +61 -0
  27. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_agent_adapter.py +43 -0
  28. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_agent_interrupt.py +28 -0
  29. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_agent_stats.py +53 -0
  30. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_invoker.py +28 -0
  31. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_notify_action_adapter.py +83 -0
  32. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_run_adapter.py +212 -0
  33. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_runs_adapter.py +65 -0
  34. skiller-0.1.0b1/apps/tui/src/stui/adapter/cli_waiting_adapter.py +83 -0
  35. skiller-0.1.0b1/apps/tui/src/stui/adapter/default_events_port.py +75 -0
  36. skiller-0.1.0b1/apps/tui/src/stui/adapter/default_installation_state_port.py +77 -0
  37. skiller-0.1.0b1/apps/tui/src/stui/adapter/default_notify_action_port.py +57 -0
  38. skiller-0.1.0b1/apps/tui/src/stui/adapter/default_run_port.py +17 -0
  39. skiller-0.1.0b1/apps/tui/src/stui/adapter/default_runs_port.py +19 -0
  40. skiller-0.1.0b1/apps/tui/src/stui/adapter/default_waiting_port.py +14 -0
  41. skiller-0.1.0b1/apps/tui/src/stui/adapter/events/__init__.py +1 -0
  42. skiller-0.1.0b1/apps/tui/src/stui/adapter/events/cli_log_event.py +23 -0
  43. skiller-0.1.0b1/apps/tui/src/stui/adapter/events/cli_log_event_adapter.py +55 -0
  44. skiller-0.1.0b1/apps/tui/src/stui/adapter/events/log_event_mapper.py +538 -0
  45. skiller-0.1.0b1/apps/tui/src/stui/adapter/events/logs_event_observer.py +179 -0
  46. skiller-0.1.0b1/apps/tui/src/stui/app.py +30 -0
  47. skiller-0.1.0b1/apps/tui/src/stui/di/__init__.py +1 -0
  48. skiller-0.1.0b1/apps/tui/src/stui/di/container.py +200 -0
  49. skiller-0.1.0b1/apps/tui/src/stui/di/strings.py +30 -0
  50. skiller-0.1.0b1/apps/tui/src/stui/port/__init__.py +0 -0
  51. skiller-0.1.0b1/apps/tui/src/stui/port/agent_port.py +47 -0
  52. skiller-0.1.0b1/apps/tui/src/stui/port/event_models.py +302 -0
  53. skiller-0.1.0b1/apps/tui/src/stui/port/event_port.py +37 -0
  54. skiller-0.1.0b1/apps/tui/src/stui/port/installation_state_port.py +14 -0
  55. skiller-0.1.0b1/apps/tui/src/stui/port/notify_action_port.py +25 -0
  56. skiller-0.1.0b1/apps/tui/src/stui/port/run_port.py +75 -0
  57. skiller-0.1.0b1/apps/tui/src/stui/port/runs_port.py +26 -0
  58. skiller-0.1.0b1/apps/tui/src/stui/port/waiting_port.py +22 -0
  59. skiller-0.1.0b1/apps/tui/src/stui/screen/__init__.py +0 -0
  60. skiller-0.1.0b1/apps/tui/src/stui/screen/action_open_url_view.py +110 -0
  61. skiller-0.1.0b1/apps/tui/src/stui/screen/agent_context_stats_view.py +196 -0
  62. skiller-0.1.0b1/apps/tui/src/stui/screen/autocomplete_view.py +83 -0
  63. skiller-0.1.0b1/apps/tui/src/stui/screen/console_screen.py +652 -0
  64. skiller-0.1.0b1/apps/tui/src/stui/screen/markdown.py +50 -0
  65. skiller-0.1.0b1/apps/tui/src/stui/screen/prompt.py +190 -0
  66. skiller-0.1.0b1/apps/tui/src/stui/screen/runs_table_view.py +250 -0
  67. skiller-0.1.0b1/apps/tui/src/stui/screen/screen_status_view.py +83 -0
  68. skiller-0.1.0b1/apps/tui/src/stui/screen/theme.py +384 -0
  69. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/__init__.py +55 -0
  70. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_assistant_message_view.py +27 -0
  71. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_final_assistant_message_view.py +19 -0
  72. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_step_final_output_view.py +26 -0
  73. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_system_notice_view.py +36 -0
  74. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_tool_call_view.py +34 -0
  75. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/agent_tool_result_view.py +25 -0
  76. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/base.py +11 -0
  77. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/blank_line_view.py +16 -0
  78. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/collapsed_route_view.py +24 -0
  79. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/dispatch_error_view.py +27 -0
  80. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/info_view.py +19 -0
  81. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/intro_view.py +26 -0
  82. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/placeholder_view.py +20 -0
  83. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/render_transcript.py +285 -0
  84. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_ack_view.py +22 -0
  85. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_finished_view.py +20 -0
  86. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_output_view.py +22 -0
  87. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_resume_view.py +21 -0
  88. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_step_view.py +49 -0
  89. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_system_notice_view.py +64 -0
  90. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_waiting_input_view.py +21 -0
  91. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/run_waiting_webhook_view.py +36 -0
  92. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_error_view.py +33 -0
  93. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_notify_output_view.py +33 -0
  94. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_output_view.py +33 -0
  95. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/step_shell_output_view.py +33 -0
  96. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/user_input_view.py +34 -0
  97. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript/view_helpers.py +297 -0
  98. skiller-0.1.0b1/apps/tui/src/stui/screen/transcript_log.py +13 -0
  99. skiller-0.1.0b1/apps/tui/src/stui/usecase/__init__.py +2 -0
  100. skiller-0.1.0b1/apps/tui/src/stui/usecase/agent_status_use_case.py +27 -0
  101. skiller-0.1.0b1/apps/tui/src/stui/usecase/autocomplete_use_case.py +76 -0
  102. skiller-0.1.0b1/apps/tui/src/stui/usecase/done_notify_action_use_case.py +37 -0
  103. skiller-0.1.0b1/apps/tui/src/stui/usecase/event_state_use_case.py +186 -0
  104. skiller-0.1.0b1/apps/tui/src/stui/usecase/event_transcript_mapper.py +490 -0
  105. skiller-0.1.0b1/apps/tui/src/stui/usecase/interrupt_agent_turn_use_case.py +49 -0
  106. skiller-0.1.0b1/apps/tui/src/stui/usecase/list_runs_use_case.py +84 -0
  107. skiller-0.1.0b1/apps/tui/src/stui/usecase/move_completion_use_case.py +27 -0
  108. skiller-0.1.0b1/apps/tui/src/stui/usecase/normalize_command_use_case.py +81 -0
  109. skiller-0.1.0b1/apps/tui/src/stui/usecase/open_notify_action_use_case.py +47 -0
  110. skiller-0.1.0b1/apps/tui/src/stui/usecase/project_agent_usage_use_case.py +46 -0
  111. skiller-0.1.0b1/apps/tui/src/stui/usecase/project_notify_action_use_case.py +80 -0
  112. skiller-0.1.0b1/apps/tui/src/stui/usecase/project_transcript_use_case.py +54 -0
  113. skiller-0.1.0b1/apps/tui/src/stui/usecase/prompt_enter_use_case.py +35 -0
  114. skiller-0.1.0b1/apps/tui/src/stui/usecase/run_command_use_case.py +89 -0
  115. skiller-0.1.0b1/apps/tui/src/stui/usecase/run_event_context.py +40 -0
  116. skiller-0.1.0b1/apps/tui/src/stui/usecase/select_runs_table_row_use_case.py +85 -0
  117. skiller-0.1.0b1/apps/tui/src/stui/usecase/start_console_use_case.py +80 -0
  118. skiller-0.1.0b1/apps/tui/src/stui/usecase/submit_waiting_input_use_case.py +72 -0
  119. skiller-0.1.0b1/apps/tui/src/stui/usecase/toggle_agent_stats_use_case.py +60 -0
  120. skiller-0.1.0b1/apps/tui/src/stui/usecase/unsupported_input_use_case.py +37 -0
  121. skiller-0.1.0b1/apps/tui/src/stui/viewmodel/__init__.py +0 -0
  122. skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_event.py +14 -0
  123. skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_state.py +425 -0
  124. skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_use_cases.py +60 -0
  125. skiller-0.1.0b1/apps/tui/src/stui/viewmodel/console_screen_viewmodel.py +327 -0
  126. skiller-0.1.0b1/apps/tui/src/stui/viewmodel/port_to_viewmodel.py +25 -0
  127. skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_agent_adapter.py +143 -0
  128. skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_log_event_adapter.py +721 -0
  129. skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_notify_action_adapter.py +101 -0
  130. skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_run_adapter.py +230 -0
  131. skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_runs_adapter.py +72 -0
  132. skiller-0.1.0b1/apps/tui/tests/adapter/test_cli_waiting_adapter.py +72 -0
  133. skiller-0.1.0b1/apps/tui/tests/adapter/test_default_events_port.py +170 -0
  134. skiller-0.1.0b1/apps/tui/tests/adapter/test_default_installation_state_port.py +88 -0
  135. skiller-0.1.0b1/apps/tui/tests/adapter/test_default_notify_action_port.py +75 -0
  136. skiller-0.1.0b1/apps/tui/tests/adapter/test_default_run_port.py +22 -0
  137. skiller-0.1.0b1/apps/tui/tests/adapter/test_default_runs_port.py +50 -0
  138. skiller-0.1.0b1/apps/tui/tests/adapter/test_logs_event_observer.py +346 -0
  139. skiller-0.1.0b1/apps/tui/tests/conftest.py +12 -0
  140. skiller-0.1.0b1/apps/tui/tests/flows/notify/notify.yaml +30 -0
  141. skiller-0.1.0b1/apps/tui/tests/screen/test_action_open_url_view.py +226 -0
  142. skiller-0.1.0b1/apps/tui/tests/screen/test_agent_context_stats_view.py +64 -0
  143. skiller-0.1.0b1/apps/tui/tests/screen/test_autocomplete_view.py +107 -0
  144. skiller-0.1.0b1/apps/tui/tests/screen/test_console_screen.py +105 -0
  145. skiller-0.1.0b1/apps/tui/tests/screen/test_console_screen_integration.py +1100 -0
  146. skiller-0.1.0b1/apps/tui/tests/screen/test_prompt.py +45 -0
  147. skiller-0.1.0b1/apps/tui/tests/screen/test_render_transcript.py +450 -0
  148. skiller-0.1.0b1/apps/tui/tests/screen/test_runs_table_view.py +219 -0
  149. skiller-0.1.0b1/apps/tui/tests/screen/test_screen_status_view.py +32 -0
  150. skiller-0.1.0b1/apps/tui/tests/screen/test_transcript_log.py +25 -0
  151. skiller-0.1.0b1/apps/tui/tests/support.py +215 -0
  152. skiller-0.1.0b1/apps/tui/tests/usecase/test_agent_status_use_case.py +77 -0
  153. skiller-0.1.0b1/apps/tui/tests/usecase/test_autocomplete_use_case.py +87 -0
  154. skiller-0.1.0b1/apps/tui/tests/usecase/test_done_notify_action_use_case.py +82 -0
  155. skiller-0.1.0b1/apps/tui/tests/usecase/test_event_state_use_case.py +388 -0
  156. skiller-0.1.0b1/apps/tui/tests/usecase/test_event_transcript_mapper.py +810 -0
  157. skiller-0.1.0b1/apps/tui/tests/usecase/test_interrupt_agent_turn_use_case.py +77 -0
  158. skiller-0.1.0b1/apps/tui/tests/usecase/test_list_runs_use_case.py +101 -0
  159. skiller-0.1.0b1/apps/tui/tests/usecase/test_move_completion_use_case.py +50 -0
  160. skiller-0.1.0b1/apps/tui/tests/usecase/test_normalize_command_use_case.py +67 -0
  161. skiller-0.1.0b1/apps/tui/tests/usecase/test_open_notify_action_use_case.py +128 -0
  162. skiller-0.1.0b1/apps/tui/tests/usecase/test_project_agent_usage_use_case.py +60 -0
  163. skiller-0.1.0b1/apps/tui/tests/usecase/test_project_notify_action_use_case.py +210 -0
  164. skiller-0.1.0b1/apps/tui/tests/usecase/test_project_transcript_use_case.py +120 -0
  165. skiller-0.1.0b1/apps/tui/tests/usecase/test_prompt_enter_use_case.py +62 -0
  166. skiller-0.1.0b1/apps/tui/tests/usecase/test_run_command_use_case.py +279 -0
  167. skiller-0.1.0b1/apps/tui/tests/usecase/test_run_event_context.py +27 -0
  168. skiller-0.1.0b1/apps/tui/tests/usecase/test_select_runs_table_row_use_case.py +318 -0
  169. skiller-0.1.0b1/apps/tui/tests/usecase/test_start_console_use_case.py +237 -0
  170. skiller-0.1.0b1/apps/tui/tests/usecase/test_submit_waiting_input_use_case.py +298 -0
  171. skiller-0.1.0b1/apps/tui/tests/usecase/test_toggle_agent_stats_use_case.py +65 -0
  172. skiller-0.1.0b1/apps/tui/tests/usecase/test_unsupported_input_use_case.py +55 -0
  173. skiller-0.1.0b1/apps/tui/tests/viewmodel/test_console_screen_viewmodel.py +1176 -0
  174. skiller-0.1.0b1/apps/tui/tests/viewmodel/test_port_to_viewmodel.py +49 -0
  175. skiller-0.1.0b1/packages/skiller/agents/ant/agent.yaml +35 -0
  176. skiller-0.1.0b1/packages/skiller/agents/ci/agent.json +49 -0
  177. skiller-0.1.0b1/packages/skiller/agents/ci/agent.yaml +32 -0
  178. skiller-0.1.0b1/packages/skiller/agents/ci/system.md +147 -0
  179. skiller-0.1.0b1/packages/skiller/agents/codex-auth/agent.yaml +83 -0
  180. skiller-0.1.0b1/packages/skiller/agents/codex-auth/codex_auth.py +477 -0
  181. skiller-0.1.0b1/packages/skiller/agents/kawa/agent.json +52 -0
  182. skiller-0.1.0b1/packages/skiller/agents/kawa/agent.yaml +32 -0
  183. skiller-0.1.0b1/packages/skiller/agents/kawa/system.md +23 -0
  184. skiller-0.1.0b1/packages/skiller/agents/llmconfig/agent.yaml +132 -0
  185. skiller-0.1.0b1/packages/skiller/agents/mono/agent.json +49 -0
  186. skiller-0.1.0b1/packages/skiller/agents/mono/agent.yaml +40 -0
  187. skiller-0.1.0b1/packages/skiller/agents/openai-auth/agent.yaml +84 -0
  188. skiller-0.1.0b1/packages/skiller/agents/openai-auth/openai_auth.py +670 -0
  189. skiller-0.1.0b1/packages/skiller/agents/pr/agent.yaml +37 -0
  190. skiller-0.1.0b1/packages/skiller/agents/steps/agent.yaml +57 -0
  191. skiller-0.1.0b1/packages/skiller/agents/whatsapp/agent.yaml +15 -0
  192. skiller-0.1.0b1/packages/skiller/docs/agent/agent-config.md +394 -0
  193. skiller-0.1.0b1/packages/skiller/docs/agent/agent-context.md +500 -0
  194. skiller-0.1.0b1/packages/skiller/docs/agent/agent-event.md +311 -0
  195. skiller-0.1.0b1/packages/skiller/docs/agent/agent-loop.md +125 -0
  196. skiller-0.1.0b1/packages/skiller/docs/architecture/architecture.md +199 -0
  197. skiller-0.1.0b1/packages/skiller/docs/architecture/code-style.md +199 -0
  198. skiller-0.1.0b1/packages/skiller/docs/cli/command-guide.md +440 -0
  199. skiller-0.1.0b1/packages/skiller/docs/cli/commands/action.md +72 -0
  200. skiller-0.1.0b1/packages/skiller/docs/cli/commands/agent.md +145 -0
  201. skiller-0.1.0b1/packages/skiller/docs/cli/commands/catalogue.md +28 -0
  202. skiller-0.1.0b1/packages/skiller/docs/cli/commands/input.md +42 -0
  203. skiller-0.1.0b1/packages/skiller/docs/cli/commands/logs.md +152 -0
  204. skiller-0.1.0b1/packages/skiller/docs/cli/commands/resume.md +45 -0
  205. skiller-0.1.0b1/packages/skiller/docs/cli/commands/run.md +170 -0
  206. skiller-0.1.0b1/packages/skiller/docs/cli/commands/runs.md +72 -0
  207. skiller-0.1.0b1/packages/skiller/docs/cli/commands/server.md +104 -0
  208. skiller-0.1.0b1/packages/skiller/docs/cli/commands/status.md +163 -0
  209. skiller-0.1.0b1/packages/skiller/docs/cli/commands/webhook.md +128 -0
  210. skiller-0.1.0b1/packages/skiller/docs/cli/tool-cloudflared.md +160 -0
  211. skiller-0.1.0b1/packages/skiller/docs/cli/tool-server.md +49 -0
  212. skiller-0.1.0b1/packages/skiller/docs/cli/tool-whatsapp.md +176 -0
  213. skiller-0.1.0b1/packages/skiller/docs/config/config.md +80 -0
  214. skiller-0.1.0b1/packages/skiller/docs/db/runtime-db-model.md +122 -0
  215. skiller-0.1.0b1/packages/skiller/docs/db/schema.md +319 -0
  216. skiller-0.1.0b1/packages/skiller/docs/dev/codex-auth-credentials.md +223 -0
  217. skiller-0.1.0b1/packages/skiller/docs/dev/openai-auth-local-callback.md +252 -0
  218. skiller-0.1.0b1/packages/skiller/docs/dev/revive-agent-run.md +195 -0
  219. skiller-0.1.0b1/packages/skiller/docs/dev/ruff-import-sorting-incident.md +45 -0
  220. skiller-0.1.0b1/packages/skiller/docs/events/context-model.md +346 -0
  221. skiller-0.1.0b1/packages/skiller/docs/events/event.md +595 -0
  222. skiller-0.1.0b1/packages/skiller/docs/flows/flow-checker.md +106 -0
  223. skiller-0.1.0b1/packages/skiller/docs/flows/flow-readiness-checker.md +104 -0
  224. skiller-0.1.0b1/packages/skiller/docs/flows/flow-schema.md +185 -0
  225. skiller-0.1.0b1/packages/skiller/docs/issues/agent-failure-retry-spike.md +97 -0
  226. skiller-0.1.0b1/packages/skiller/docs/issues/list +0 -0
  227. skiller-0.1.0b1/packages/skiller/docs/runtime/agent-architecture.md +107 -0
  228. skiller-0.1.0b1/packages/skiller/docs/runtime/execution-model.md +53 -0
  229. skiller-0.1.0b1/packages/skiller/docs/steps/agent.md +361 -0
  230. skiller-0.1.0b1/packages/skiller/docs/steps/assign.md +52 -0
  231. skiller-0.1.0b1/packages/skiller/docs/steps/mcp.md +71 -0
  232. skiller-0.1.0b1/packages/skiller/docs/steps/notify.md +123 -0
  233. skiller-0.1.0b1/packages/skiller/docs/steps/send.md +39 -0
  234. skiller-0.1.0b1/packages/skiller/docs/steps/shell.md +81 -0
  235. skiller-0.1.0b1/packages/skiller/docs/steps/switch.md +33 -0
  236. skiller-0.1.0b1/packages/skiller/docs/steps/wait_channel.md +73 -0
  237. skiller-0.1.0b1/packages/skiller/docs/steps/wait_input.md +71 -0
  238. skiller-0.1.0b1/packages/skiller/docs/steps/wait_webhook.md +66 -0
  239. skiller-0.1.0b1/packages/skiller/docs/steps/when.md +42 -0
  240. skiller-0.1.0b1/packages/skiller/docs/tool/agent-tool-dev.md +314 -0
  241. skiller-0.1.0b1/packages/skiller/src/skiller/__main__.py +4 -0
  242. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/agent_runner.py +199 -0
  243. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/config/agent_step_mapper.py +66 -0
  244. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/config/output_truncator.py +25 -0
  245. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/config/step_config_reader.py +108 -0
  246. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/context/agent_context_manager.py +91 -0
  247. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/context/agent_context_publisher.py +180 -0
  248. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/event/agent_event_publisher.py +190 -0
  249. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/event/agent_event_truncator.py +133 -0
  250. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/llmodel/llm_model_manager.py +54 -0
  251. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/mapper/error_mapper.py +25 -0
  252. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/mapper/feedback.py +44 -0
  253. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/prompt/prompt_builder.py +162 -0
  254. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/runner_state.py +73 -0
  255. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/tools/agent_tool_executor.py +319 -0
  256. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/tools/tool_manager.py +204 -0
  257. skiller-0.1.0b1/packages/skiller/src/skiller/application/agent/tools/tool_manager_model.py +17 -0
  258. skiller-0.1.0b1/packages/skiller/src/skiller/application/agents/mapper.py +58 -0
  259. skiller-0.1.0b1/packages/skiller/src/skiller/application/agents/service.py +24 -0
  260. skiller-0.1.0b1/packages/skiller/src/skiller/application/query_mapper.py +17 -0
  261. skiller-0.1.0b1/packages/skiller/src/skiller/application/query_service.py +77 -0
  262. skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/executor.py +324 -0
  263. skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/mapper.py +102 -0
  264. skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/models.py +30 -0
  265. skiller-0.1.0b1/packages/skiller/src/skiller/application/runs/service.py +182 -0
  266. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/__init__.py +1 -0
  267. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/__init__.py +10 -0
  268. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/config.py +13 -0
  269. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/models.py +20 -0
  270. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/policy.py +72 -0
  271. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/runtime_config_mapper.py +47 -0
  272. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/files/tool.py +242 -0
  273. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/notify/__init__.py +6 -0
  274. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/notify/tool.py +58 -0
  275. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/__init__.py +9 -0
  276. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/config.py +14 -0
  277. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/models.py +12 -0
  278. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/policy.py +208 -0
  279. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/process_tool.py +162 -0
  280. skiller-0.1.0b1/packages/skiller/src/skiller/application/tools/shell/runtime_config_mapper.py +70 -0
  281. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/agent/get_agent_stats.py +116 -0
  282. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/agent/interrupt_agent.py +55 -0
  283. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_agent_step.py +216 -0
  284. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_assign_step.py +69 -0
  285. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_mcp_step.py +118 -0
  286. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_notify_step.py +144 -0
  287. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_send_step.py +86 -0
  288. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_shell_step.py +214 -0
  289. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_switch_step.py +93 -0
  290. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_wait_channel_step.py +215 -0
  291. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_wait_input_step.py +155 -0
  292. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_wait_webhook_step.py +136 -0
  293. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/execute/execute_when_step.py +169 -0
  294. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/flow/flow_checker.py +603 -0
  295. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/flow/flow_readiness_checker.py +127 -0
  296. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/ingress/handle_channel.py +167 -0
  297. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/ingress/handle_input.py +106 -0
  298. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/ingress/handle_webhook.py +107 -0
  299. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_run.py +10 -0
  300. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_run_logs.py +23 -0
  301. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_run_status.py +10 -0
  302. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_runs.py +10 -0
  303. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/get_waiting_metadata.py +73 -0
  304. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/query/list_webhooks.py +16 -0
  305. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/render/render_current_step.py +99 -0
  306. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/render/render_mcp_config.py +274 -0
  307. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/append_runtime_event.py +40 -0
  308. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/bootstrap_runtime.py +12 -0
  309. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/complete_run.py +13 -0
  310. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/create_run.py +38 -0
  311. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/delete_run.py +41 -0
  312. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/fail_run.py +16 -0
  313. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/get_start_step.py +32 -0
  314. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/mark_notify_action_done.py +117 -0
  315. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/resume_run.py +31 -0
  316. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/run/sync_snapshot.py +130 -0
  317. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/webhook/register_webhook.py +86 -0
  318. skiller-0.1.0b1/packages/skiller/src/skiller/application/use_cases/webhook/remove_webhook.py +41 -0
  319. skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/channel_mapper.py +43 -0
  320. skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/input_mapper.py +33 -0
  321. skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/service.py +64 -0
  322. skiller-0.1.0b1/packages/skiller/src/skiller/application/waits/webhook_mapper.py +138 -0
  323. skiller-0.1.0b1/packages/skiller/src/skiller/di/__init__.py +3 -0
  324. skiller-0.1.0b1/packages/skiller/src/skiller/di/container.py +402 -0
  325. skiller-0.1.0b1/packages/skiller/src/skiller/di/llm_client_factory.py +41 -0
  326. skiller-0.1.0b1/packages/skiller/src/skiller/domain/action/action_model.py +96 -0
  327. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_config_model.py +47 -0
  328. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_config_port.py +13 -0
  329. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_config_validation_model.py +38 -0
  330. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_context_model.py +190 -0
  331. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_context_stats_port.py +18 -0
  332. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_context_store_port.py +59 -0
  333. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_llm_provider_model.py +106 -0
  334. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_loop_model.py +16 -0
  335. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_run_identity.py +14 -0
  336. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_run_model.py +11 -0
  337. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/agent_stats_model.py +39 -0
  338. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/llm_client_resolver.py +9 -0
  339. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/llm_model.py +221 -0
  340. skiller-0.1.0b1/packages/skiller/src/skiller/domain/agent/llm_port.py +7 -0
  341. skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/event_model.py +366 -0
  342. skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/runtime_event_store_port.py +52 -0
  343. skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/webhook_registration_model.py +16 -0
  344. skiller-0.1.0b1/packages/skiller/src/skiller/domain/event/webhook_registry_port.py +25 -0
  345. skiller-0.1.0b1/packages/skiller/src/skiller/domain/mcp/mcp_config_model.py +13 -0
  346. skiller-0.1.0b1/packages/skiller/src/skiller/domain/mcp/mcp_port.py +32 -0
  347. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_context_model.py +70 -0
  348. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_list_item_model.py +31 -0
  349. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_model.py +71 -0
  350. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_query_port.py +12 -0
  351. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_status_runtime_model.py +14 -0
  352. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/run_store_port.py +51 -0
  353. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/runtime_bootstrap_port.py +5 -0
  354. skiller-0.1.0b1/packages/skiller/src/skiller/domain/run/steering_model.py +82 -0
  355. skiller-0.1.0b1/packages/skiller/src/skiller/domain/shared/policies.py +7 -0
  356. skiller-0.1.0b1/packages/skiller/src/skiller/domain/shared/policy_gate_port.py +5 -0
  357. skiller-0.1.0b1/packages/skiller/src/skiller/domain/shared/steering_port.py +9 -0
  358. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/current_step_model.py +30 -0
  359. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/run_step_model.py +103 -0
  360. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/runner_port.py +22 -0
  361. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/server_status_port.py +5 -0
  362. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/step_execution_model.py +330 -0
  363. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/step_execution_result_model.py +17 -0
  364. skiller-0.1.0b1/packages/skiller/src/skiller/domain/step/step_type.py +15 -0
  365. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/channel_sender_model.py +9 -0
  366. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/channel_sender_port.py +19 -0
  367. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_contract.py +192 -0
  368. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_execution_model.py +97 -0
  369. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_process_model.py +54 -0
  370. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_process_port.py +26 -0
  371. skiller-0.1.0b1/packages/skiller/src/skiller/domain/tool/tool_router_port.py +5 -0
  372. skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/external_event_store_port.py +49 -0
  373. skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/match_type.py +7 -0
  374. skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/source_type.py +7 -0
  375. skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/wait_store_port.py +41 -0
  376. skiller-0.1.0b1/packages/skiller/src/skiller/domain/wait/wait_type.py +7 -0
  377. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/agent/agent_context_store.py +285 -0
  378. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/agent_config_mapper.py +363 -0
  379. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/agent_config_schema.py +83 -0
  380. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/json_agent_config.py +139 -0
  381. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/settings.py +201 -0
  382. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/config/settings_model.py +12 -0
  383. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_agent_context_datasource.py +430 -0
  384. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_agent_steering_store.py +75 -0
  385. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_external_event_store.py +205 -0
  386. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_repository.py +12 -0
  387. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_run_mapper.py +91 -0
  388. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_run_query_store.py +78 -0
  389. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_runtime_bootstrap.py +169 -0
  390. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_runtime_event_store.py +265 -0
  391. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_state_store.py +357 -0
  392. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_wait_store.py +202 -0
  393. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/db/sqlite_webhook_registry.py +91 -0
  394. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/fake_llm.py +25 -0
  395. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/null_llm.py +14 -0
  396. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_codex_credentials.py +74 -0
  397. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_codex_responses_llm.py +107 -0
  398. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_llm.py +62 -0
  399. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_mapper.py +261 -0
  400. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_responses_llm.py +91 -0
  401. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/llm/openai_responses_mapper.py +257 -0
  402. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/skills/filesystem_skill_runner.py +276 -0
  403. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/channels/default_channel_sender.py +112 -0
  404. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/mcp/client.py +453 -0
  405. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/mcp/default_mcp.py +53 -0
  406. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/process/default_tool_process.py +174 -0
  407. skiller-0.1.0b1/packages/skiller/src/skiller/infrastructure/tools/webhooks/default_server_status.py +20 -0
  408. skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/__init__.py +0 -0
  409. skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/cli/__init__.py +0 -0
  410. skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/cli/main.py +1131 -0
  411. skiller-0.1.0b1/packages/skiller/src/skiller/interfaces/runtime_controller.py +183 -0
  412. skiller-0.1.0b1/packages/skiller/src/skiller/local/__init__.py +1 -0
  413. skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/__init__.py +1 -0
  414. skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/__init__.py +1 -0
  415. skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/bridge/bridge.js +465 -0
  416. skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/bridge/package.json +11 -0
  417. skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/pair_service.py +539 -0
  418. skiller-0.1.0b1/packages/skiller/src/skiller/local/channels/whatsapp/process_service.py +434 -0
  419. skiller-0.1.0b1/packages/skiller/src/skiller/local/server/__init__.py +1 -0
  420. skiller-0.1.0b1/packages/skiller/src/skiller/local/server/__main__.py +19 -0
  421. skiller-0.1.0b1/packages/skiller/src/skiller/local/server/app.py +197 -0
  422. skiller-0.1.0b1/packages/skiller/src/skiller/local/server/launcher.py +96 -0
  423. skiller-0.1.0b1/packages/skiller/src/skiller/local/server/process_service.py +245 -0
  424. skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/__init__.py +1 -0
  425. skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/__init__.py +29 -0
  426. skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/ensure_service.py +241 -0
  427. skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/login_service.py +281 -0
  428. skiller-0.1.0b1/packages/skiller/src/skiller/local/tunnels/cloudflared/process_service.py +419 -0
  429. skiller-0.1.0b1/packages/skiller/src/skiller/local/workers/__init__.py +6 -0
  430. skiller-0.1.0b1/packages/skiller/src/skiller/local/workers/process_service.py +37 -0
  431. skiller-0.1.0b1/packages/skiller/tests/conftest.py +16 -0
  432. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_all.sh +90 -0
  433. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_assign.sh +21 -0
  434. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_codex_client.sh +144 -0
  435. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_mcp_stdio.sh +22 -0
  436. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_notify.sh +19 -0
  437. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_notify_link.sh +116 -0
  438. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_runs.sh +72 -0
  439. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_server.sh +97 -0
  440. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_shell.sh +63 -0
  441. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_switch.sh +21 -0
  442. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_wait_input.sh +33 -0
  443. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_wait_webhook.sh +45 -0
  444. skiller-0.1.0b1/packages/skiller/tests/e2e/cli_when.sh +19 -0
  445. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/assign_cli_e2e.yaml +19 -0
  446. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/notify_cli_e2e.yaml +10 -0
  447. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/notify_link_cli_e2e.yaml +28 -0
  448. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/shell_cli_e2e.yaml +13 -0
  449. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/switch_cli_e2e.yaml +29 -0
  450. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/wait_input_cli_e2e.yaml +14 -0
  451. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/wait_webhook_cli_e2e.yaml +16 -0
  452. skiller-0.1.0b1/packages/skiller/tests/e2e/skills/when_cli_e2e.yaml +28 -0
  453. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/files-tool/agent.json +24 -0
  454. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/files-tool/agent.yaml +23 -0
  455. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/files-tool/run.sh +135 -0
  456. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/minimal/agent.yaml +17 -0
  457. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/minimal/run.sh +71 -0
  458. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/run_all.sh +95 -0
  459. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/fail-max-turn.yaml +19 -0
  460. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/fail-multi-tools.yaml +20 -0
  461. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/max-turn.yaml +19 -0
  462. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/multi-tools.yaml +20 -0
  463. skiller-0.1.0b1/packages/skiller/tests/e2e-agent/tools-calls/run.sh +161 -0
  464. skiller-0.1.0b1/packages/skiller/tests/helpers/agent_config.py +84 -0
  465. skiller-0.1.0b1/packages/skiller/tests/helpers/agent_runner.py +339 -0
  466. skiller-0.1.0b1/packages/skiller/tests/integration/mcp/test_chrome_mcp_probe_integration.py +99 -0
  467. skiller-0.1.0b1/packages/skiller/tests/integration/mcp/test_mcp_probe_integration.py +80 -0
  468. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/conftest.py +38 -0
  469. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/fixtures/mcp/test_file_mcp_server.py +200 -0
  470. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/fixtures/mcp/test_mcp_server.py +31 -0
  471. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_basic_skill_examples.py +459 -0
  472. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_basic_skill_examples_real_mcp.py +343 -0
  473. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_external_skill_file.py +690 -0
  474. skiller-0.1.0b1/packages/skiller/tests/integration/runtime/test_flow_checker_builtin_flows.py +25 -0
  475. skiller-0.1.0b1/packages/skiller/tests/prompts/A-shell-allowed-paths.md +31 -0
  476. skiller-0.1.0b1/packages/skiller/tests/prompts/B-multiple-shell-calls.md +24 -0
  477. skiller-0.1.0b1/packages/skiller/tests/prompts/C-tool-call-limit.md +39 -0
  478. skiller-0.1.0b1/packages/skiller/tests/prompts/D-shell-interrupt.md +32 -0
  479. skiller-0.1.0b1/packages/skiller/tests/prompts/E-max-turns.md +70 -0
  480. skiller-0.1.0b1/packages/skiller/tests/unit/agents/test_ci_agent_config.py +64 -0
  481. skiller-0.1.0b1/packages/skiller/tests/unit/agents/test_kawa_agent_config.py +69 -0
  482. skiller-0.1.0b1/packages/skiller/tests/unit/agents/test_mono_agent_config.py +31 -0
  483. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/config/test_agent_step_mapper.py +102 -0
  484. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/config/test_output_truncator.py +31 -0
  485. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/config/test_step_config_reader.py +239 -0
  486. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/context/test_agent_context_manager.py +234 -0
  487. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/llmodel/test_llm_model_manager.py +101 -0
  488. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/prompt/test_prompt_builder.py +311 -0
  489. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_context_publisher.py +369 -0
  490. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_event_dispatcher.py +240 -0
  491. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_event_truncator.py +102 -0
  492. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_agent_runner.py +990 -0
  493. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/test_error_mapper.py +54 -0
  494. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/tools/test_application_agent_tool_execution.py +717 -0
  495. skiller-0.1.0b1/packages/skiller/tests/unit/application/agent/tools/test_tool_manager.py +308 -0
  496. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_agent_service_mapper.py +82 -0
  497. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_channel_wait_mapper.py +37 -0
  498. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_input_wait_mapper.py +24 -0
  499. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_query_service.py +147 -0
  500. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_run_application_service.py +463 -0
  501. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_run_executor.py +685 -0
  502. skiller-0.1.0b1/packages/skiller/tests/unit/application/test_webhook_wait_mapper.py +133 -0
  503. skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_files_tool.py +339 -0
  504. skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_notify_tool.py +37 -0
  505. skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_shell_command_policy.py +172 -0
  506. skiller-0.1.0b1/packages/skiller/tests/unit/application/tools/test_shell_process_tool.py +155 -0
  507. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_complete_run.py +40 -0
  508. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_create_run.py +91 -0
  509. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_delete_run.py +63 -0
  510. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_agent_step.py +1064 -0
  511. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_assign_step.py +136 -0
  512. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_mcp_step.py +245 -0
  513. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_notify_step.py +286 -0
  514. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_send_step.py +138 -0
  515. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_shell_step.py +359 -0
  516. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_switch_step.py +159 -0
  517. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_wait_channel_step.py +236 -0
  518. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_wait_input_step.py +309 -0
  519. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_wait_webhook_step.py +263 -0
  520. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_execute_when_step.py +189 -0
  521. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_fail_run.py +60 -0
  522. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_flow_checker.py +410 -0
  523. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_flow_readiness_checker.py +271 -0
  524. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_agent_stats.py +166 -0
  525. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_runs.py +75 -0
  526. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_start_step.py +94 -0
  527. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_get_waiting_metadata.py +97 -0
  528. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_handle_channel.py +194 -0
  529. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_handle_input.py +140 -0
  530. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_handle_webhook.py +146 -0
  531. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_interrupt_agent.py +83 -0
  532. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_mark_notify_action_done.py +186 -0
  533. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_render_current_step.py +243 -0
  534. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_render_mcp_config.py +661 -0
  535. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_sync_snapshot.py +207 -0
  536. skiller-0.1.0b1/packages/skiller/tests/unit/application/use_cases/test_webhook_registry_use_cases.py +159 -0
  537. skiller-0.1.0b1/packages/skiller/tests/unit/conftest.py +30 -0
  538. skiller-0.1.0b1/packages/skiller/tests/unit/di/test_container.py +99 -0
  539. skiller-0.1.0b1/packages/skiller/tests/unit/domain/test_agent_config_model.py +96 -0
  540. skiller-0.1.0b1/packages/skiller/tests/unit/domain/test_llm_model.py +96 -0
  541. skiller-0.1.0b1/packages/skiller/tests/unit/domain/test_step_execution_model.py +183 -0
  542. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/config/test_json_agent_config.py +489 -0
  543. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/config/test_settings.py +152 -0
  544. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_agent_steering_store.py +69 -0
  545. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_external_event_store.py +113 -0
  546. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_runtime_bootstrap.py +77 -0
  547. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/db/test_sqlite_runtime_event_store.py +324 -0
  548. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_fake_llm.py +21 -0
  549. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_codex_credentials.py +74 -0
  550. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_codex_responses_llm.py +233 -0
  551. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_llm.py +158 -0
  552. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_mapper.py +188 -0
  553. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_responses_llm.py +186 -0
  554. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/llm/test_openai_responses_mapper.py +296 -0
  555. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/mcp/test_default_mcp.py +44 -0
  556. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/mcp/test_mcp_client.py +182 -0
  557. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_agent_context_store.py +785 -0
  558. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_filesystem_skill_runner.py +283 -0
  559. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_sqlite_run_query_store.py +131 -0
  560. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/test_sqlite_state_store.py +599 -0
  561. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/tools/channels/test_default_channel_sender.py +101 -0
  562. skiller-0.1.0b1/packages/skiller/tests/unit/infrastructure/tools/process/test_default_tool_process.py +265 -0
  563. skiller-0.1.0b1/packages/skiller/tests/unit/interfaces/cli/test_main.py +1095 -0
  564. skiller-0.1.0b1/packages/skiller/tests/unit/interfaces/test_runtime_controller.py +238 -0
  565. skiller-0.1.0b1/packages/skiller/tests/unit/local/channels/whatsapp/test_pair_service.py +164 -0
  566. skiller-0.1.0b1/packages/skiller/tests/unit/local/channels/whatsapp/test_whatsapp_process_service.py +143 -0
  567. skiller-0.1.0b1/packages/skiller/tests/unit/local/server/test_app.py +287 -0
  568. skiller-0.1.0b1/packages/skiller/tests/unit/local/server/test_launcher.py +92 -0
  569. skiller-0.1.0b1/packages/skiller/tests/unit/local/server/test_server_process_service.py +111 -0
  570. skiller-0.1.0b1/packages/skiller/tests/unit/local/tunnels/cloudflared/test_cloudflared_process_service.py +190 -0
  571. skiller-0.1.0b1/packages/skiller/tests/unit/local/tunnels/cloudflared/test_ensure_service.py +121 -0
  572. skiller-0.1.0b1/packages/skiller/tests/unit/local/tunnels/cloudflared/test_login_service.py +85 -0
  573. skiller-0.1.0b1/packages/skiller/tests/unit/local/workers/test_worker_process_service.py +72 -0
  574. skiller-0.1.0b1/pyproject.toml +60 -0
  575. skiller-0.1.0b1/scripts/ci/validate_pr_branch.py +70 -0
  576. skiller-0.1.0b1/scripts/ci/validate_release_pr.py +149 -0
  577. skiller-0.1.0b1/skills/agent_demo.yaml +35 -0
  578. skiller-0.1.0b1/skills/agent_tools.yaml +35 -0
  579. skiller-0.1.0b1/skills/basic_demo.yaml +30 -0
  580. skiller-0.1.0b1/skills/delay_test.yaml +46 -0
  581. skiller-0.1.0b1/skills/http_mcp_test.yaml +18 -0
  582. skiller-0.1.0b1/skills/notify_test.yaml +10 -0
  583. skiller-0.1.0b1/skills/pull_request.yaml +37 -0
  584. skiller-0.1.0b1/skills/repo_checks.yaml +35 -0
  585. skiller-0.1.0b1/skills/stdio_mcp_test.yaml +27 -0
  586. skiller-0.1.0b1/skills/story_router.yaml +67 -0
  587. skiller-0.1.0b1/skills/ui_progress_test.yaml +44 -0
  588. skiller-0.1.0b1/skills/wait_input_test.yaml +14 -0
  589. skiller-0.1.0b1/skills/whatsapp_demo.yaml +15 -0
  590. skiller-0.1.0b1/skills/whatsapp_send_demo.yaml +13 -0
  591. 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,4 @@
1
+ interface:
2
+ display_name: "Skiller Dev"
3
+ short_description: "Readable Skiller code style"
4
+ default_prompt: "Use $skiller-dev to keep Skiller code flat, explicit, and contract-driven."
@@ -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