sase 0.1.0__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 (670) hide show
  1. sase-0.1.0/.beads/.gitignore +52 -0
  2. sase-0.1.0/.beads/PRIME.md +86 -0
  3. sase-0.1.0/.beads/README.md +87 -0
  4. sase-0.1.0/.beads/config.yaml +67 -0
  5. sase-0.1.0/.beads/interactions.jsonl +0 -0
  6. sase-0.1.0/.beads/issues.jsonl +204 -0
  7. sase-0.1.0/.beads/metadata.json +6 -0
  8. sase-0.1.0/.claude/settings.json +15 -0
  9. sase-0.1.0/.gitattributes +3 -0
  10. sase-0.1.0/.github/workflows/ci.yml +107 -0
  11. sase-0.1.0/.github/workflows/publish.yml +32 -0
  12. sase-0.1.0/.gitignore +56 -0
  13. sase-0.1.0/AGENTS.md +98 -0
  14. sase-0.1.0/CLAUDE.md +1 -0
  15. sase-0.1.0/CONTRIBUTING.md +53 -0
  16. sase-0.1.0/GEMINI.md +1 -0
  17. sase-0.1.0/Justfile +103 -0
  18. sase-0.1.0/PKG-INFO +26 -0
  19. sase-0.1.0/README.md +187 -0
  20. sase-0.1.0/config/sase.schema.json +245 -0
  21. sase-0.1.0/docs/ace.md +266 -0
  22. sase-0.1.0/docs/change_spec.md +288 -0
  23. sase-0.1.0/docs/configuration.md +429 -0
  24. sase-0.1.0/docs/llms.md +467 -0
  25. sase-0.1.0/docs/project_spec.md +132 -0
  26. sase-0.1.0/docs/query_language.md +186 -0
  27. sase-0.1.0/docs/vcs.md +505 -0
  28. sase-0.1.0/docs/workflow_spec.md +606 -0
  29. sase-0.1.0/docs/xprompt.md +344 -0
  30. sase-0.1.0/lib/bugyi-260221.sh +300 -0
  31. sase-0.1.0/plans/ace_agent_mode.md +228 -0
  32. sase-0.1.0/plans/axe_lumberjacks.md +311 -0
  33. sase-0.1.0/plans/axe_lumberjacks_v2.md +288 -0
  34. sase-0.1.0/plans/claude_ask_user_question.md +282 -0
  35. sase-0.1.0/plans/claude_thinking_panel.md +325 -0
  36. sase-0.1.0/plans/fix_git_to_branch.md +168 -0
  37. sase-0.1.0/plans/gh_workflow.md +319 -0
  38. sase-0.1.0/plans/git_change_specs.md +241 -0
  39. sase-0.1.0/plans/git_change_specs_v2.md +440 -0
  40. sase-0.1.0/plans/git_change_specs_v3.md +411 -0
  41. sase-0.1.0/plans/git_workflow.md +248 -0
  42. sase-0.1.0/plans/hg_workflow.md +222 -0
  43. sase-0.1.0/plans/inbox_tab.md +287 -0
  44. sase-0.1.0/plans/mark_and_wait.md +229 -0
  45. sase-0.1.0/plans/migrate_from_gai.md +238 -0
  46. sase-0.1.0/plans/multi_file_panel.md +228 -0
  47. sase-0.1.0/plans/notify.md +335 -0
  48. sase-0.1.0/plans/notify_v2.md +186 -0
  49. sase-0.1.0/plans/planning_coding_question.md +253 -0
  50. sase-0.1.0/plans/plugin_repos.md +487 -0
  51. sase-0.1.0/plans/sync_workflow.md +292 -0
  52. sase-0.1.0/plans/use_hg_workflow.md +351 -0
  53. sase-0.1.0/plans/vcs_plugins.md +219 -0
  54. sase-0.1.0/prompts/ace_agent_mode.md +4 -0
  55. sase-0.1.0/prompts/axe_epic_beads.md +39 -0
  56. sase-0.1.0/prompts/axe_lumberjacks.md +47 -0
  57. sase-0.1.0/prompts/axe_lumberjacks_v2.md +18 -0
  58. sase-0.1.0/prompts/big_workflow.md +21 -0
  59. sase-0.1.0/prompts/git_change_specs_v2.md +66 -0
  60. sase-0.1.0/prompts/git_change_specs_v3.md +9 -0
  61. sase-0.1.0/prompts/mark_and_wait.md +18 -0
  62. sase-0.1.0/prompts/notify.md +80 -0
  63. sase-0.1.0/prompts/notify_v2.md +25 -0
  64. sase-0.1.0/prompts/planning_coding_question.md +16 -0
  65. sase-0.1.0/prompts/plugin_repos.md +21 -0
  66. sase-0.1.0/prompts/resume_agent.md +29 -0
  67. sase-0.1.0/pyproject.toml +160 -0
  68. sase-0.1.0/research/plugins/pluggy_repo_separation.md +374 -0
  69. sase-0.1.0/research/plugins/sase_plugin_specifics.md +430 -0
  70. sase-0.1.0/src/sase/__init__.py +3 -0
  71. sase-0.1.0/src/sase/__main__.py +6 -0
  72. sase-0.1.0/src/sase/accept_workflow/__init__.py +26 -0
  73. sase-0.1.0/src/sase/accept_workflow/conflict_check.py +226 -0
  74. sase-0.1.0/src/sase/accept_workflow/parsing.py +183 -0
  75. sase-0.1.0/src/sase/accept_workflow/renumber.py +549 -0
  76. sase-0.1.0/src/sase/accept_workflow/workflow.py +395 -0
  77. sase-0.1.0/src/sase/ace/AGENTS.md +24 -0
  78. sase-0.1.0/src/sase/ace/CLAUDE.md +1 -0
  79. sase-0.1.0/src/sase/ace/GEMINI.md +1 -0
  80. sase-0.1.0/src/sase/ace/README.md +153 -0
  81. sase-0.1.0/src/sase/ace/__init__.py +5 -0
  82. sase-0.1.0/src/sase/ace/agent_runner.py +104 -0
  83. sase-0.1.0/src/sase/ace/archive.py +185 -0
  84. sase-0.1.0/src/sase/ace/changespec/__init__.py +160 -0
  85. sase-0.1.0/src/sase/ace/changespec/locking.py +156 -0
  86. sase-0.1.0/src/sase/ace/changespec/models.py +440 -0
  87. sase-0.1.0/src/sase/ace/changespec/parser.py +346 -0
  88. sase-0.1.0/src/sase/ace/changespec/raw_text.py +82 -0
  89. sase-0.1.0/src/sase/ace/changespec/section_parsers.py +357 -0
  90. sase-0.1.0/src/sase/ace/changespec/suffix_utils.py +78 -0
  91. sase-0.1.0/src/sase/ace/changespec/validation.py +316 -0
  92. sase-0.1.0/src/sase/ace/cl_status.py +37 -0
  93. sase-0.1.0/src/sase/ace/comments/__init__.py +31 -0
  94. sase-0.1.0/src/sase/ace/comments/core.py +117 -0
  95. sase-0.1.0/src/sase/ace/comments/operations.py +456 -0
  96. sase-0.1.0/src/sase/ace/constants.py +13 -0
  97. sase-0.1.0/src/sase/ace/dismissed_agents.py +77 -0
  98. sase-0.1.0/src/sase/ace/display.py +627 -0
  99. sase-0.1.0/src/sase/ace/display_helpers.py +156 -0
  100. sase-0.1.0/src/sase/ace/handlers/__init__.py +24 -0
  101. sase-0.1.0/src/sase/ace/handlers/edit_hooks.py +304 -0
  102. sase-0.1.0/src/sase/ace/handlers/mail.py +106 -0
  103. sase-0.1.0/src/sase/ace/handlers/reword.py +375 -0
  104. sase-0.1.0/src/sase/ace/handlers/show_diff.py +73 -0
  105. sase-0.1.0/src/sase/ace/handlers/workflow_handlers.py +415 -0
  106. sase-0.1.0/src/sase/ace/hint_types.py +29 -0
  107. sase-0.1.0/src/sase/ace/hints.py +210 -0
  108. sase-0.1.0/src/sase/ace/hooks/__init__.py +143 -0
  109. sase-0.1.0/src/sase/ace/hooks/defaults.py +22 -0
  110. sase-0.1.0/src/sase/ace/hooks/execution.py +672 -0
  111. sase-0.1.0/src/sase/ace/hooks/history.py +81 -0
  112. sase-0.1.0/src/sase/ace/hooks/mutations.py +505 -0
  113. sase-0.1.0/src/sase/ace/hooks/processes.py +510 -0
  114. sase-0.1.0/src/sase/ace/hooks/status.py +197 -0
  115. sase-0.1.0/src/sase/ace/hooks/test_targets.py +176 -0
  116. sase-0.1.0/src/sase/ace/hooks/timestamps.py +153 -0
  117. sase-0.1.0/src/sase/ace/hooks/workflow_queries.py +170 -0
  118. sase-0.1.0/src/sase/ace/last_selection.py +26 -0
  119. sase-0.1.0/src/sase/ace/mail_ops.py +588 -0
  120. sase-0.1.0/src/sase/ace/mentors.py +630 -0
  121. sase-0.1.0/src/sase/ace/operations.py +261 -0
  122. sase-0.1.0/src/sase/ace/query/__init__.py +62 -0
  123. sase-0.1.0/src/sase/ace/query/evaluator.py +444 -0
  124. sase-0.1.0/src/sase/ace/query/highlighting.py +285 -0
  125. sase-0.1.0/src/sase/ace/query/parser.py +307 -0
  126. sase-0.1.0/src/sase/ace/query/tokenizer.py +419 -0
  127. sase-0.1.0/src/sase/ace/query/types.py +175 -0
  128. sase-0.1.0/src/sase/ace/query_history.py +124 -0
  129. sase-0.1.0/src/sase/ace/query_selection.py +52 -0
  130. sase-0.1.0/src/sase/ace/restore.py +224 -0
  131. sase-0.1.0/src/sase/ace/revert.py +190 -0
  132. sase-0.1.0/src/sase/ace/saved_queries.py +165 -0
  133. sase-0.1.0/src/sase/ace/saved_tag_names.py +79 -0
  134. sase-0.1.0/src/sase/ace/scheduler/__init__.py +17 -0
  135. sase-0.1.0/src/sase/ace/scheduler/checks_runner.py +528 -0
  136. sase-0.1.0/src/sase/ace/scheduler/comments_handler.py +48 -0
  137. sase-0.1.0/src/sase/ace/scheduler/hook_checks.py +538 -0
  138. sase-0.1.0/src/sase/ace/scheduler/hooks_runner.py +655 -0
  139. sase-0.1.0/src/sase/ace/scheduler/mentor_checks.py +630 -0
  140. sase-0.1.0/src/sase/ace/scheduler/mentor_runner.py +223 -0
  141. sase-0.1.0/src/sase/ace/scheduler/orphan_cleanup.py +68 -0
  142. sase-0.1.0/src/sase/ace/scheduler/stale_running_cleanup.py +70 -0
  143. sase-0.1.0/src/sase/ace/scheduler/suffix_transforms.py +374 -0
  144. sase-0.1.0/src/sase/ace/scheduler/workflows_runner/__init__.py +16 -0
  145. sase-0.1.0/src/sase/ace/scheduler/workflows_runner/completer.py +451 -0
  146. sase-0.1.0/src/sase/ace/scheduler/workflows_runner/monitor.py +134 -0
  147. sase-0.1.0/src/sase/ace/scheduler/workflows_runner/starter.py +597 -0
  148. sase-0.1.0/src/sase/ace/status.py +37 -0
  149. sase-0.1.0/src/sase/ace/sync_cache.py +106 -0
  150. sase-0.1.0/src/sase/ace/tui/__init__.py +5 -0
  151. sase-0.1.0/src/sase/ace/tui/_workflow_context.py +23 -0
  152. sase-0.1.0/src/sase/ace/tui/actions/__init__.py +31 -0
  153. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/__init__.py +21 -0
  154. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_agent_launch.py +411 -0
  155. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_editor.py +146 -0
  156. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_entry_points.py +223 -0
  157. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_prompt_bar.py +340 -0
  158. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_ref_resolution.py +143 -0
  159. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_types.py +26 -0
  160. sase-0.1.0/src/sase/ace/tui/actions/agent_workflow/_workflow_exec.py +273 -0
  161. sase-0.1.0/src/sase/ace/tui/actions/agents/__init__.py +9 -0
  162. sase-0.1.0/src/sase/ace/tui/actions/agents/_core.py +309 -0
  163. sase-0.1.0/src/sase/ace/tui/actions/agents/_folding.py +140 -0
  164. sase-0.1.0/src/sase/ace/tui/actions/agents/_interaction.py +246 -0
  165. sase-0.1.0/src/sase/ace/tui/actions/agents/_killing.py +469 -0
  166. sase-0.1.0/src/sase/ace/tui/actions/agents/_notification_actions.py +463 -0
  167. sase-0.1.0/src/sase/ace/tui/actions/agents/_notifications.py +196 -0
  168. sase-0.1.0/src/sase/ace/tui/actions/agents/_revive.py +119 -0
  169. sase-0.1.0/src/sase/ace/tui/actions/agents/_workflow_hitl.py +173 -0
  170. sase-0.1.0/src/sase/ace/tui/actions/axe.py +264 -0
  171. sase-0.1.0/src/sase/ace/tui/actions/axe_bgcmd.py +315 -0
  172. sase-0.1.0/src/sase/ace/tui/actions/axe_display.py +358 -0
  173. sase-0.1.0/src/sase/ace/tui/actions/base.py +695 -0
  174. sase-0.1.0/src/sase/ace/tui/actions/changespec.py +434 -0
  175. sase-0.1.0/src/sase/ace/tui/actions/clipboard.py +645 -0
  176. sase-0.1.0/src/sase/ace/tui/actions/event_handlers.py +186 -0
  177. sase-0.1.0/src/sase/ace/tui/actions/hints/__init__.py +19 -0
  178. sase-0.1.0/src/sase/ace/tui/actions/hints/_accept.py +225 -0
  179. sase-0.1.0/src/sase/ace/tui/actions/hints/_files.py +113 -0
  180. sase-0.1.0/src/sase/ace/tui/actions/hints/_hooks.py +288 -0
  181. sase-0.1.0/src/sase/ace/tui/actions/hints/_processing.py +290 -0
  182. sase-0.1.0/src/sase/ace/tui/actions/hints/_rewind.py +138 -0
  183. sase-0.1.0/src/sase/ace/tui/actions/hints/_types.py +44 -0
  184. sase-0.1.0/src/sase/ace/tui/actions/marking.py +128 -0
  185. sase-0.1.0/src/sase/ace/tui/actions/navigation/__init__.py +23 -0
  186. sase-0.1.0/src/sase/ace/tui/actions/navigation/_advanced.py +197 -0
  187. sase-0.1.0/src/sase/ace/tui/actions/navigation/_basic.py +222 -0
  188. sase-0.1.0/src/sase/ace/tui/actions/navigation/_tree.py +283 -0
  189. sase-0.1.0/src/sase/ace/tui/actions/navigation/_types.py +50 -0
  190. sase-0.1.0/src/sase/ace/tui/actions/proposal_rebase.py +469 -0
  191. sase-0.1.0/src/sase/ace/tui/actions/rename.py +245 -0
  192. sase-0.1.0/src/sase/ace/tui/actions/sync.py +188 -0
  193. sase-0.1.0/src/sase/ace/tui/app.py +481 -0
  194. sase-0.1.0/src/sase/ace/tui/bgcmd.py +360 -0
  195. sase-0.1.0/src/sase/ace/tui/changespec_history.py +141 -0
  196. sase-0.1.0/src/sase/ace/tui/modals/__init__.py +69 -0
  197. sase-0.1.0/src/sase/ace/tui/modals/agent_name_modal.py +65 -0
  198. sase-0.1.0/src/sase/ace/tui/modals/base.py +80 -0
  199. sase-0.1.0/src/sase/ace/tui/modals/command_history_modal.py +271 -0
  200. sase-0.1.0/src/sase/ace/tui/modals/command_input_modal.py +76 -0
  201. sase-0.1.0/src/sase/ace/tui/modals/confirm_delete_modal.py +53 -0
  202. sase-0.1.0/src/sase/ace/tui/modals/confirm_kill_modal.py +53 -0
  203. sase-0.1.0/src/sase/ace/tui/modals/help_modal/__init__.py +6 -0
  204. sase-0.1.0/src/sase/ace/tui/modals/help_modal/bindings.py +235 -0
  205. sase-0.1.0/src/sase/ace/tui/modals/help_modal/modal.py +250 -0
  206. sase-0.1.0/src/sase/ace/tui/modals/help_modal/query_sections.py +236 -0
  207. sase-0.1.0/src/sase/ace/tui/modals/hook_history_modal.py +183 -0
  208. sase-0.1.0/src/sase/ace/tui/modals/notification_modal.py +374 -0
  209. sase-0.1.0/src/sase/ace/tui/modals/parent_select_modal.py +42 -0
  210. sase-0.1.0/src/sase/ace/tui/modals/plan_approval_modal.py +166 -0
  211. sase-0.1.0/src/sase/ace/tui/modals/process_select_modal.py +152 -0
  212. sase-0.1.0/src/sase/ace/tui/modals/project_select_modal.py +302 -0
  213. sase-0.1.0/src/sase/ace/tui/modals/prompt_history_modal.py +298 -0
  214. sase-0.1.0/src/sase/ace/tui/modals/query_edit_modal.py +64 -0
  215. sase-0.1.0/src/sase/ace/tui/modals/rename_cl_modal.py +122 -0
  216. sase-0.1.0/src/sase/ace/tui/modals/revive_agent_modal.py +263 -0
  217. sase-0.1.0/src/sase/ace/tui/modals/runners_modal.py +515 -0
  218. sase-0.1.0/src/sase/ace/tui/modals/status_modal.py +57 -0
  219. sase-0.1.0/src/sase/ace/tui/modals/tag_input_modal.py +182 -0
  220. sase-0.1.0/src/sase/ace/tui/modals/user_question_modal.py +568 -0
  221. sase-0.1.0/src/sase/ace/tui/modals/workflow_hitl_modal.py +188 -0
  222. sase-0.1.0/src/sase/ace/tui/modals/workflow_select_modal.py +42 -0
  223. sase-0.1.0/src/sase/ace/tui/modals/workspace_input_modal.py +73 -0
  224. sase-0.1.0/src/sase/ace/tui/modals/xprompt_select_modal.py +249 -0
  225. sase-0.1.0/src/sase/ace/tui/models/__init__.py +21 -0
  226. sase-0.1.0/src/sase/ace/tui/models/_loaders/__init__.py +31 -0
  227. sase-0.1.0/src/sase/ace/tui/models/_loaders/_artifact_loaders.py +331 -0
  228. sase-0.1.0/src/sase/ace/tui/models/_loaders/_changespec_loaders.py +159 -0
  229. sase-0.1.0/src/sase/ace/tui/models/_loaders/_workflow_loaders.py +412 -0
  230. sase-0.1.0/src/sase/ace/tui/models/_timestamps.py +156 -0
  231. sase-0.1.0/src/sase/ace/tui/models/agent.py +331 -0
  232. sase-0.1.0/src/sase/ace/tui/models/agent_loader.py +392 -0
  233. sase-0.1.0/src/sase/ace/tui/models/fold_state.py +123 -0
  234. sase-0.1.0/src/sase/ace/tui/models/workflow.py +102 -0
  235. sase-0.1.0/src/sase/ace/tui/styles.tcss +1345 -0
  236. sase-0.1.0/src/sase/ace/tui/thinking/__init__.py +18 -0
  237. sase-0.1.0/src/sase/ace/tui/thinking/parser.py +218 -0
  238. sase-0.1.0/src/sase/ace/tui/thinking/session_resolver.py +185 -0
  239. sase-0.1.0/src/sase/ace/tui/widgets/__init__.py +39 -0
  240. sase-0.1.0/src/sase/ace/tui/widgets/agent_detail.py +587 -0
  241. sase-0.1.0/src/sase/ace/tui/widgets/agent_info_panel.py +76 -0
  242. sase-0.1.0/src/sase/ace/tui/widgets/agent_list.py +378 -0
  243. sase-0.1.0/src/sase/ace/tui/widgets/ancestors_children_panel.py +559 -0
  244. sase-0.1.0/src/sase/ace/tui/widgets/axe_dashboard.py +489 -0
  245. sase-0.1.0/src/sase/ace/tui/widgets/axe_info_panel.py +113 -0
  246. sase-0.1.0/src/sase/ace/tui/widgets/bgcmd_list.py +174 -0
  247. sase-0.1.0/src/sase/ace/tui/widgets/changespec_detail.py +430 -0
  248. sase-0.1.0/src/sase/ace/tui/widgets/changespec_info_panel.py +59 -0
  249. sase-0.1.0/src/sase/ace/tui/widgets/changespec_list.py +220 -0
  250. sase-0.1.0/src/sase/ace/tui/widgets/comments_builder.py +67 -0
  251. sase-0.1.0/src/sase/ace/tui/widgets/commits_builder.py +245 -0
  252. sase-0.1.0/src/sase/ace/tui/widgets/file_panel.py +588 -0
  253. sase-0.1.0/src/sase/ace/tui/widgets/hint_input_bar.py +171 -0
  254. sase-0.1.0/src/sase/ace/tui/widgets/hint_tracker.py +15 -0
  255. sase-0.1.0/src/sase/ace/tui/widgets/hooks_builder.py +286 -0
  256. sase-0.1.0/src/sase/ace/tui/widgets/keybinding_footer.py +543 -0
  257. sase-0.1.0/src/sase/ace/tui/widgets/mentors_builder.py +211 -0
  258. sase-0.1.0/src/sase/ace/tui/widgets/notification_indicator.py +33 -0
  259. sase-0.1.0/src/sase/ace/tui/widgets/prompt_input_bar.py +209 -0
  260. sase-0.1.0/src/sase/ace/tui/widgets/prompt_panel/__init__.py +27 -0
  261. sase-0.1.0/src/sase/ace/tui/widgets/prompt_panel/_agent_display.py +339 -0
  262. sase-0.1.0/src/sase/ace/tui/widgets/prompt_panel/_helpers.py +250 -0
  263. sase-0.1.0/src/sase/ace/tui/widgets/prompt_panel/_workflow_display.py +662 -0
  264. sase-0.1.0/src/sase/ace/tui/widgets/section_builders.py +18 -0
  265. sase-0.1.0/src/sase/ace/tui/widgets/suffix_formatting.py +145 -0
  266. sase-0.1.0/src/sase/ace/tui/widgets/tab_bar.py +97 -0
  267. sase-0.1.0/src/sase/ace/tui/widgets/thinking_panel.py +459 -0
  268. sase-0.1.0/src/sase/ace/workflows/__init__.py +7 -0
  269. sase-0.1.0/src/sase/ace/workflows/crs.py +231 -0
  270. sase-0.1.0/src/sase/agent_names.py +155 -0
  271. sase-0.1.0/src/sase/amend_workflow.py +255 -0
  272. sase-0.1.0/src/sase/axe/__init__.py +78 -0
  273. sase-0.1.0/src/sase/axe/check_cycles.py +276 -0
  274. sase-0.1.0/src/sase/axe/chop_script_context.py +146 -0
  275. sase-0.1.0/src/sase/axe/chop_script_runner.py +106 -0
  276. sase-0.1.0/src/sase/axe/cli.py +185 -0
  277. sase-0.1.0/src/sase/axe/config.py +112 -0
  278. sase-0.1.0/src/sase/axe/hook_jobs.py +226 -0
  279. sase-0.1.0/src/sase/axe/lumberjack.py +233 -0
  280. sase-0.1.0/src/sase/axe/orchestrator.py +151 -0
  281. sase-0.1.0/src/sase/axe/process.py +210 -0
  282. sase-0.1.0/src/sase/axe/runner_pool.py +248 -0
  283. sase-0.1.0/src/sase/axe/state.py +538 -0
  284. sase-0.1.0/src/sase/axe_crs_runner.py +150 -0
  285. sase-0.1.0/src/sase/axe_fix_hook_runner.py +262 -0
  286. sase-0.1.0/src/sase/axe_mentor_runner.py +145 -0
  287. sase-0.1.0/src/sase/axe_run_agent_runner.py +452 -0
  288. sase-0.1.0/src/sase/axe_run_workflow_runner.py +276 -0
  289. sase-0.1.0/src/sase/axe_runner_utils.py +116 -0
  290. sase-0.1.0/src/sase/axe_summarize_hook_runner.py +171 -0
  291. sase-0.1.0/src/sase/change_actions.py +651 -0
  292. sase-0.1.0/src/sase/chat_history.py +235 -0
  293. sase-0.1.0/src/sase/command_history.py +207 -0
  294. sase-0.1.0/src/sase/commit_utils/__init__.py +41 -0
  295. sase-0.1.0/src/sase/commit_utils/entries.py +439 -0
  296. sase-0.1.0/src/sase/commit_utils/modifiers.py +392 -0
  297. sase-0.1.0/src/sase/commit_utils/workspace.py +136 -0
  298. sase-0.1.0/src/sase/commit_workflow/__init__.py +59 -0
  299. sase-0.1.0/src/sase/commit_workflow/branch_info.py +23 -0
  300. sase-0.1.0/src/sase/commit_workflow/changespec_operations.py +218 -0
  301. sase-0.1.0/src/sase/commit_workflow/changespec_queries.py +75 -0
  302. sase-0.1.0/src/sase/commit_workflow/cl_formatting.py +41 -0
  303. sase-0.1.0/src/sase/commit_workflow/editor_utils.py +72 -0
  304. sase-0.1.0/src/sase/commit_workflow/project_file_utils.py +45 -0
  305. sase-0.1.0/src/sase/commit_workflow/workflow.py +303 -0
  306. sase-0.1.0/src/sase/config.py +148 -0
  307. sase-0.1.0/src/sase/crs_workflow.py +236 -0
  308. sase-0.1.0/src/sase/default_config.yml +48 -0
  309. sase-0.1.0/src/sase/gemini_wrapper/__init__.py +32 -0
  310. sase-0.1.0/src/sase/gemini_wrapper/file_references.py +517 -0
  311. sase-0.1.0/src/sase/gemini_wrapper/wrapper.py +168 -0
  312. sase-0.1.0/src/sase/gh_workspace.py +425 -0
  313. sase-0.1.0/src/sase/git_submit.py +329 -0
  314. sase-0.1.0/src/sase/git_utils.py +49 -0
  315. sase-0.1.0/src/sase/git_workspace.py +312 -0
  316. sase-0.1.0/src/sase/github_config.py +14 -0
  317. sase-0.1.0/src/sase/hook_history.py +120 -0
  318. sase-0.1.0/src/sase/llm_provider/__init__.py +36 -0
  319. sase-0.1.0/src/sase/llm_provider/_invoke.py +207 -0
  320. sase-0.1.0/src/sase/llm_provider/_subprocess.py +200 -0
  321. sase-0.1.0/src/sase/llm_provider/base.py +46 -0
  322. sase-0.1.0/src/sase/llm_provider/claude.py +246 -0
  323. sase-0.1.0/src/sase/llm_provider/config.py +25 -0
  324. sase-0.1.0/src/sase/llm_provider/gemini.py +119 -0
  325. sase-0.1.0/src/sase/llm_provider/postprocessing.py +244 -0
  326. sase-0.1.0/src/sase/llm_provider/preprocessing.py +183 -0
  327. sase-0.1.0/src/sase/llm_provider/registry.py +72 -0
  328. sase-0.1.0/src/sase/llm_provider/types.py +27 -0
  329. sase-0.1.0/src/sase/main/__init__.py +5 -0
  330. sase-0.1.0/src/sase/main/cl_handler.py +171 -0
  331. sase-0.1.0/src/sase/main/entry.py +389 -0
  332. sase-0.1.0/src/sase/main/notify_handler.py +49 -0
  333. sase-0.1.0/src/sase/main/parser.py +423 -0
  334. sase-0.1.0/src/sase/main/plan_approve_handler.py +252 -0
  335. sase-0.1.0/src/sase/main/query_handler/__init__.py +15 -0
  336. sase-0.1.0/src/sase/main/query_handler/_editor.py +204 -0
  337. sase-0.1.0/src/sase/main/query_handler/_query.py +471 -0
  338. sase-0.1.0/src/sase/main/query_handler/_resume.py +76 -0
  339. sase-0.1.0/src/sase/main/query_handler/special_cases.py +197 -0
  340. sase-0.1.0/src/sase/main/user_question_handler.py +169 -0
  341. sase-0.1.0/src/sase/main/utils.py +71 -0
  342. sase-0.1.0/src/sase/mentor_config.py +190 -0
  343. sase-0.1.0/src/sase/mentor_workflow.py +303 -0
  344. sase-0.1.0/src/sase/metahook_config.py +107 -0
  345. sase-0.1.0/src/sase/notifications/__init__.py +30 -0
  346. sase-0.1.0/src/sase/notifications/models.py +55 -0
  347. sase-0.1.0/src/sase/notifications/senders.py +148 -0
  348. sase-0.1.0/src/sase/notifications/store.py +128 -0
  349. sase-0.1.0/src/sase/plugin_discovery.py +54 -0
  350. sase-0.1.0/src/sase/prompt_history.py +237 -0
  351. sase-0.1.0/src/sase/py.typed +0 -0
  352. sase-0.1.0/src/sase/renumber_utils.py +213 -0
  353. sase-0.1.0/src/sase/rewind_workflow/__init__.py +9 -0
  354. sase-0.1.0/src/sase/rewind_workflow/renumber.py +461 -0
  355. sase-0.1.0/src/sase/rewind_workflow/workflow.py +199 -0
  356. sase-0.1.0/src/sase/rich_utils.py +222 -0
  357. sase-0.1.0/src/sase/running_field.py +575 -0
  358. sase-0.1.0/src/sase/sase_utils.py +235 -0
  359. sase-0.1.0/src/sase/scripts/__init__.py +142 -0
  360. sase-0.1.0/src/sase/scripts/gh_setup.py +52 -0
  361. sase-0.1.0/src/sase/scripts/git_setup.py +53 -0
  362. sase-0.1.0/src/sase/scripts/hg_setup.py +71 -0
  363. sase-0.1.0/src/sase/scripts/new_pr_desc_get_context.py +88 -0
  364. sase-0.1.0/src/sase/scripts/pr_create_changespec.py +58 -0
  365. sase-0.1.0/src/sase/scripts/sase_chop_cl_submitted_checks.py +28 -0
  366. sase-0.1.0/src/sase/scripts/sase_chop_comment_checks.py +28 -0
  367. sase-0.1.0/src/sase/scripts/sase_chop_comment_zombie_checks.py +37 -0
  368. sase-0.1.0/src/sase/scripts/sase_chop_error_digest.py +29 -0
  369. sase-0.1.0/src/sase/scripts/sase_chop_hook_checks.py +37 -0
  370. sase-0.1.0/src/sase/scripts/sase_chop_mentor_checks.py +37 -0
  371. sase-0.1.0/src/sase/scripts/sase_chop_orphan_cleanup.py +37 -0
  372. sase-0.1.0/src/sase/scripts/sase_chop_pending_checks_poll.py +37 -0
  373. sase-0.1.0/src/sase/scripts/sase_chop_stale_running_cleanup.py +33 -0
  374. sase-0.1.0/src/sase/scripts/sase_chop_suffix_transforms.py +38 -0
  375. sase-0.1.0/src/sase/scripts/sase_chop_wait_checks.py +91 -0
  376. sase-0.1.0/src/sase/scripts/sase_chop_workflow_checks.py +37 -0
  377. sase-0.1.0/src/sase/scripts/sase_commit_workflow +357 -0
  378. sase-0.1.0/src/sase/scripts/sase_json_workflow +80 -0
  379. sase-0.1.0/src/sase/scripts/sase_migrate_statuses +176 -0
  380. sase-0.1.0/src/sase/scripts/sase_split_prepare_execute +116 -0
  381. sase-0.1.0/src/sase/scripts/sase_split_setup +55 -0
  382. sase-0.1.0/src/sase/scripts/sync_attempt.py +39 -0
  383. sase-0.1.0/src/sase/scripts/sync_report.py +30 -0
  384. sase-0.1.0/src/sase/scripts/sync_setup.py +36 -0
  385. sase-0.1.0/src/sase/shared_utils.py +309 -0
  386. sase-0.1.0/src/sase/status_state_machine/__init__.py +49 -0
  387. sase-0.1.0/src/sase/status_state_machine/constants.py +88 -0
  388. sase-0.1.0/src/sase/status_state_machine/field_updates.py +409 -0
  389. sase-0.1.0/src/sase/status_state_machine/mail_suffix.py +96 -0
  390. sase-0.1.0/src/sase/status_state_machine/transitions.py +636 -0
  391. sase-0.1.0/src/sase/summarize_utils.py +37 -0
  392. sase-0.1.0/src/sase/summarize_workflow.py +140 -0
  393. sase-0.1.0/src/sase/vcs_provider/__init__.py +39 -0
  394. sase-0.1.0/src/sase/vcs_provider/_base.py +234 -0
  395. sase-0.1.0/src/sase/vcs_provider/_command_runner.py +105 -0
  396. sase-0.1.0/src/sase/vcs_provider/_errors.py +21 -0
  397. sase-0.1.0/src/sase/vcs_provider/_hookspec.py +154 -0
  398. sase-0.1.0/src/sase/vcs_provider/_plugin_manager.py +201 -0
  399. sase-0.1.0/src/sase/vcs_provider/_registry.py +174 -0
  400. sase-0.1.0/src/sase/vcs_provider/_types.py +20 -0
  401. sase-0.1.0/src/sase/vcs_provider/config.py +43 -0
  402. sase-0.1.0/src/sase/vcs_provider/plugins/__init__.py +1 -0
  403. sase-0.1.0/src/sase/vcs_provider/plugins/_git_common.py +301 -0
  404. sase-0.1.0/src/sase/vcs_provider/plugins/bare_git.py +30 -0
  405. sase-0.1.0/src/sase/workflow_base.py +27 -0
  406. sase-0.1.0/src/sase/workflow_utils.py +194 -0
  407. sase-0.1.0/src/sase/workspace_changespec.py +147 -0
  408. sase-0.1.0/src/sase/xprompt/__init__.py +120 -0
  409. sase-0.1.0/src/sase/xprompt/_disabled_regions.py +78 -0
  410. sase-0.1.0/src/sase/xprompt/_exceptions.py +19 -0
  411. sase-0.1.0/src/sase/xprompt/_fenced_blocks.py +52 -0
  412. sase-0.1.0/src/sase/xprompt/_jinja.py +244 -0
  413. sase-0.1.0/src/sase/xprompt/_parsing.py +471 -0
  414. sase-0.1.0/src/sase/xprompt/_step_input_loader.py +70 -0
  415. sase-0.1.0/src/sase/xprompt/directives.py +170 -0
  416. sase-0.1.0/src/sase/xprompt/loader.py +747 -0
  417. sase-0.1.0/src/sase/xprompt/models.py +250 -0
  418. sase-0.1.0/src/sase/xprompt/output_validation.py +487 -0
  419. sase-0.1.0/src/sase/xprompt/processor.py +304 -0
  420. sase-0.1.0/src/sase/xprompt/workflow_executor.py +497 -0
  421. sase-0.1.0/src/sase/xprompt/workflow_executor_loops.py +439 -0
  422. sase-0.1.0/src/sase/xprompt/workflow_executor_parallel.py +362 -0
  423. sase-0.1.0/src/sase/xprompt/workflow_executor_steps.py +49 -0
  424. sase-0.1.0/src/sase/xprompt/workflow_executor_steps_embedded.py +593 -0
  425. sase-0.1.0/src/sase/xprompt/workflow_executor_steps_prompt.py +409 -0
  426. sase-0.1.0/src/sase/xprompt/workflow_executor_steps_script.py +363 -0
  427. sase-0.1.0/src/sase/xprompt/workflow_executor_types.py +82 -0
  428. sase-0.1.0/src/sase/xprompt/workflow_executor_utils.py +128 -0
  429. sase-0.1.0/src/sase/xprompt/workflow_hitl.py +317 -0
  430. sase-0.1.0/src/sase/xprompt/workflow_loader.py +347 -0
  431. sase-0.1.0/src/sase/xprompt/workflow_loader_parse.py +430 -0
  432. sase-0.1.0/src/sase/xprompt/workflow_models.py +280 -0
  433. sase-0.1.0/src/sase/xprompt/workflow_output.py +432 -0
  434. sase-0.1.0/src/sase/xprompt/workflow_runner.py +407 -0
  435. sase-0.1.0/src/sase/xprompt/workflow_validator.py +579 -0
  436. sase-0.1.0/tests/__init__.py +0 -0
  437. sase-0.1.0/tests/conftest.py +90 -0
  438. sase-0.1.0/tests/test_accept_suffixes.py +89 -0
  439. sase-0.1.0/tests/test_ace_constants.py +57 -0
  440. sase-0.1.0/tests/test_ace_operations.py +399 -0
  441. sase-0.1.0/tests/test_ace_tui_app.py +348 -0
  442. sase-0.1.0/tests/test_ace_tui_widgets.py +512 -0
  443. sase-0.1.0/tests/test_acknowledge_terminal_status.py +439 -0
  444. sase-0.1.0/tests/test_agent_kill.py +327 -0
  445. sase-0.1.0/tests/test_agent_loader.py +553 -0
  446. sase-0.1.0/tests/test_agent_loader_dedup.py +390 -0
  447. sase-0.1.0/tests/test_agent_loader_parsing.py +145 -0
  448. sase-0.1.0/tests/test_agent_meta_enrichment.py +75 -0
  449. sase-0.1.0/tests/test_agent_model.py +374 -0
  450. sase-0.1.0/tests/test_agent_names.py +138 -0
  451. sase-0.1.0/tests/test_agent_runner.py +164 -0
  452. sase-0.1.0/tests/test_ancestors_children_panel.py +153 -0
  453. sase-0.1.0/tests/test_archive.py +316 -0
  454. sase-0.1.0/tests/test_axe_chop_script_context.py +201 -0
  455. sase-0.1.0/tests/test_axe_chop_script_runner.py +151 -0
  456. sase-0.1.0/tests/test_axe_cli.py +245 -0
  457. sase-0.1.0/tests/test_axe_dashboard.py +67 -0
  458. sase-0.1.0/tests/test_axe_info_panel.py +70 -0
  459. sase-0.1.0/tests/test_axe_lumberjack.py +224 -0
  460. sase-0.1.0/tests/test_axe_lumberjack_config.py +267 -0
  461. sase-0.1.0/tests/test_axe_lumberjack_state.py +235 -0
  462. sase-0.1.0/tests/test_axe_orchestrator.py +162 -0
  463. sase-0.1.0/tests/test_axe_process.py +258 -0
  464. sase-0.1.0/tests/test_axe_process_new.py +136 -0
  465. sase-0.1.0/tests/test_axe_runner_pool.py +220 -0
  466. sase-0.1.0/tests/test_axe_runner_utils.py +236 -0
  467. sase-0.1.0/tests/test_axe_shared_runner_pool.py +165 -0
  468. sase-0.1.0/tests/test_axe_state.py +280 -0
  469. sase-0.1.0/tests/test_bgcmd.py +350 -0
  470. sase-0.1.0/tests/test_bgcmd_list.py +122 -0
  471. sase-0.1.0/tests/test_branch_info.py +67 -0
  472. sase-0.1.0/tests/test_change_actions.py +120 -0
  473. sase-0.1.0/tests/test_changespec_history.py +296 -0
  474. sase-0.1.0/tests/test_changespec_operations.py +502 -0
  475. sase-0.1.0/tests/test_changespec_queries.py +204 -0
  476. sase-0.1.0/tests/test_changespec_ready_to_mail.py +240 -0
  477. sase-0.1.0/tests/test_changespec_status_indicators.py +247 -0
  478. sase-0.1.0/tests/test_changespec_suffix_classification.py +95 -0
  479. sase-0.1.0/tests/test_changespec_update.py +117 -0
  480. sase-0.1.0/tests/test_chat_history.py +327 -0
  481. sase-0.1.0/tests/test_checks_runner.py +337 -0
  482. sase-0.1.0/tests/test_cl_formatting.py +183 -0
  483. sase-0.1.0/tests/test_cl_status.py +75 -0
  484. sase-0.1.0/tests/test_cli_init_git.py +356 -0
  485. sase-0.1.0/tests/test_clipboard_format.py +683 -0
  486. sase-0.1.0/tests/test_clipboard_raw_text.py +284 -0
  487. sase-0.1.0/tests/test_command_history.py +381 -0
  488. sase-0.1.0/tests/test_command_input_modal.py +39 -0
  489. sase-0.1.0/tests/test_comments.py +315 -0
  490. sase-0.1.0/tests/test_comments_handler.py +149 -0
  491. sase-0.1.0/tests/test_commit_add.py +350 -0
  492. sase-0.1.0/tests/test_commit_duration.py +225 -0
  493. sase-0.1.0/tests/test_commit_parsing.py +217 -0
  494. sase-0.1.0/tests/test_commit_utils_modifiers.py +340 -0
  495. sase-0.1.0/tests/test_commit_workflow.py +452 -0
  496. sase-0.1.0/tests/test_config.py +314 -0
  497. sase-0.1.0/tests/test_confirm_kill_modal.py +37 -0
  498. sase-0.1.0/tests/test_conflict_check.py +372 -0
  499. sase-0.1.0/tests/test_directives.py +283 -0
  500. sase-0.1.0/tests/test_disabled_regions.py +235 -0
  501. sase-0.1.0/tests/test_dismissed_agents.py +107 -0
  502. sase-0.1.0/tests/test_display_helpers.py +281 -0
  503. sase-0.1.0/tests/test_done_agent_loader.py +307 -0
  504. sase-0.1.0/tests/test_embedded_post_step_collection.py +213 -0
  505. sase-0.1.0/tests/test_embedded_workflows_per_step.py +65 -0
  506. sase-0.1.0/tests/test_fenced_blocks.py +246 -0
  507. sase-0.1.0/tests/test_file_panel.py +310 -0
  508. sase-0.1.0/tests/test_file_references_parsing.py +157 -0
  509. sase-0.1.0/tests/test_file_references_substitution.py +303 -0
  510. sase-0.1.0/tests/test_fold_filtering.py +333 -0
  511. sase-0.1.0/tests/test_fold_state.py +131 -0
  512. sase-0.1.0/tests/test_gemini_wrapper.py +416 -0
  513. sase-0.1.0/tests/test_gh_workspace.py +467 -0
  514. sase-0.1.0/tests/test_git_submit.py +33 -0
  515. sase-0.1.0/tests/test_git_utils.py +82 -0
  516. sase-0.1.0/tests/test_git_workspace.py +300 -0
  517. sase-0.1.0/tests/test_hints.py +390 -0
  518. sase-0.1.0/tests/test_hook_checks.py +251 -0
  519. sase-0.1.0/tests/test_hook_history.py +242 -0
  520. sase-0.1.0/tests/test_hook_operations.py +326 -0
  521. sase-0.1.0/tests/test_hook_wrapper_retry.py +218 -0
  522. sase-0.1.0/tests/test_hooks_core.py +284 -0
  523. sase-0.1.0/tests/test_hooks_history.py +247 -0
  524. sase-0.1.0/tests/test_hooks_kill.py +428 -0
  525. sase-0.1.0/tests/test_hooks_operations.py +559 -0
  526. sase-0.1.0/tests/test_hooks_proposals.py +149 -0
  527. sase-0.1.0/tests/test_hooks_queries_fix.py +372 -0
  528. sase-0.1.0/tests/test_hooks_queries_suffix.py +414 -0
  529. sase-0.1.0/tests/test_hooks_queries_summarize.py +258 -0
  530. sase-0.1.0/tests/test_hooks_reset_dollar.py +215 -0
  531. sase-0.1.0/tests/test_hooks_running_status.py +88 -0
  532. sase-0.1.0/tests/test_hooks_timestamps.py +178 -0
  533. sase-0.1.0/tests/test_keybinding_footer_agent.py +65 -0
  534. sase-0.1.0/tests/test_keybinding_footer_core.py +322 -0
  535. sase-0.1.0/tests/test_keybinding_footer_status.py +246 -0
  536. sase-0.1.0/tests/test_keybinding_footer_workflow.py +159 -0
  537. sase-0.1.0/tests/test_last_selection.py +96 -0
  538. sase-0.1.0/tests/test_llm_provider_core.py +167 -0
  539. sase-0.1.0/tests/test_llm_provider_invoke.py +171 -0
  540. sase-0.1.0/tests/test_llm_provider_postprocessing.py +131 -0
  541. sase-0.1.0/tests/test_llm_provider_providers.py +279 -0
  542. sase-0.1.0/tests/test_mail_ops.py +277 -0
  543. sase-0.1.0/tests/test_mentor_checks.py +652 -0
  544. sase-0.1.0/tests/test_mentor_config_dataclass.py +100 -0
  545. sase-0.1.0/tests/test_mentor_config_loading.py +264 -0
  546. sase-0.1.0/tests/test_mentor_config_prompt.py +38 -0
  547. sase-0.1.0/tests/test_mentor_config_retrieval.py +250 -0
  548. sase-0.1.0/tests/test_mentors.py +644 -0
  549. sase-0.1.0/tests/test_mentors_builder.py +219 -0
  550. sase-0.1.0/tests/test_mentors_wip.py +541 -0
  551. sase-0.1.0/tests/test_metahook_config.py +308 -0
  552. sase-0.1.0/tests/test_new_workflows.py +51 -0
  553. sase-0.1.0/tests/test_notification_store.py +275 -0
  554. sase-0.1.0/tests/test_output_validation.py +694 -0
  555. sase-0.1.0/tests/test_parsing.py +275 -0
  556. sase-0.1.0/tests/test_plugin_discovery.py +456 -0
  557. sase-0.1.0/tests/test_plugin_integration.py +200 -0
  558. sase-0.1.0/tests/test_preprocessing_code_blocks.py +156 -0
  559. sase-0.1.0/tests/test_process_select_modal.py +254 -0
  560. sase-0.1.0/tests/test_prompt_history.py +355 -0
  561. sase-0.1.0/tests/test_prompt_panel_meta.py +109 -0
  562. sase-0.1.0/tests/test_query_canonicalization.py +140 -0
  563. sase-0.1.0/tests/test_query_evaluator.py +392 -0
  564. sase-0.1.0/tests/test_query_history.py +238 -0
  565. sase-0.1.0/tests/test_query_integration.py +34 -0
  566. sase-0.1.0/tests/test_query_parser.py +286 -0
  567. sase-0.1.0/tests/test_query_property_filters.py +551 -0
  568. sase-0.1.0/tests/test_query_property_filters_name_sibling.py +261 -0
  569. sase-0.1.0/tests/test_query_selection.py +83 -0
  570. sase-0.1.0/tests/test_query_tokenizer.py +264 -0
  571. sase-0.1.0/tests/test_ready_to_mail.py +239 -0
  572. sase-0.1.0/tests/test_rebase.py +313 -0
  573. sase-0.1.0/tests/test_renumber_entries.py +554 -0
  574. sase-0.1.0/tests/test_renumber_utils.py +287 -0
  575. sase-0.1.0/tests/test_restore.py +282 -0
  576. sase-0.1.0/tests/test_revert.py +250 -0
  577. sase-0.1.0/tests/test_rewind_entries.py +339 -0
  578. sase-0.1.0/tests/test_rich_utils.py +171 -0
  579. sase-0.1.0/tests/test_running_field_operations.py +494 -0
  580. sase-0.1.0/tests/test_sase_utils.py +327 -0
  581. sase-0.1.0/tests/test_saved_queries.py +230 -0
  582. sase-0.1.0/tests/test_saved_tag_names.py +225 -0
  583. sase-0.1.0/tests/test_session_resolver.py +298 -0
  584. sase-0.1.0/tests/test_shared_utils.py +447 -0
  585. sase-0.1.0/tests/test_snippet_parsing.py +557 -0
  586. sase-0.1.0/tests/test_snippet_references.py +359 -0
  587. sase-0.1.0/tests/test_snippet_syntax.py +334 -0
  588. sase-0.1.0/tests/test_special_cases.py +165 -0
  589. sase-0.1.0/tests/test_stale_running_cleanup.py +338 -0
  590. sase-0.1.0/tests/test_status_display.py +112 -0
  591. sase-0.1.0/tests/test_status_state_machine_constants.py +130 -0
  592. sase-0.1.0/tests/test_status_state_machine_field_updates.py +557 -0
  593. sase-0.1.0/tests/test_status_state_machine_mail_suffix.py +93 -0
  594. sase-0.1.0/tests/test_status_state_machine_transitions.py +480 -0
  595. sase-0.1.0/tests/test_step_input_loader.py +233 -0
  596. sase-0.1.0/tests/test_strip_html_comments.py +109 -0
  597. sase-0.1.0/tests/test_suffix_formatting.py +250 -0
  598. sase-0.1.0/tests/test_summarize_hook.py +173 -0
  599. sase-0.1.0/tests/test_summarize_workflow.py +389 -0
  600. sase-0.1.0/tests/test_sync_workflow.py +248 -0
  601. sase-0.1.0/tests/test_thinking_parser.py +384 -0
  602. sase-0.1.0/tests/test_tool_handlers_reword.py +336 -0
  603. sase-0.1.0/tests/test_utils.py +15 -0
  604. sase-0.1.0/tests/test_vcs_provider.py +421 -0
  605. sase-0.1.0/tests/test_vcs_provider_bare_git_plugin.py +159 -0
  606. sase-0.1.0/tests/test_vcs_provider_contract.py +324 -0
  607. sase-0.1.0/tests/test_vcs_provider_git_core.py +395 -0
  608. sase-0.1.0/tests/test_vcs_provider_git_integration.py +374 -0
  609. sase-0.1.0/tests/test_vcs_provider_git_ops.py +396 -0
  610. sase-0.1.0/tests/test_vcs_provider_git_query.py +355 -0
  611. sase-0.1.0/tests/test_vcs_provider_git_sync.py +323 -0
  612. sase-0.1.0/tests/test_vcs_provider_hookspec.py +98 -0
  613. sase-0.1.0/tests/test_vcs_provider_plugin_manager.py +199 -0
  614. sase-0.1.0/tests/test_workflow_embedded_output.py +360 -0
  615. sase-0.1.0/tests/test_workflow_executor.py +609 -0
  616. sase-0.1.0/tests/test_workflow_executor_conditionals.py +211 -0
  617. sase-0.1.0/tests/test_workflow_executor_loops.py +466 -0
  618. sase-0.1.0/tests/test_workflow_executor_parallel.py +536 -0
  619. sase-0.1.0/tests/test_workflow_loader_control_flow.py +315 -0
  620. sase-0.1.0/tests/test_workflow_loader_parallel.py +340 -0
  621. sase-0.1.0/tests/test_workflow_loader_project.py +255 -0
  622. sase-0.1.0/tests/test_workflow_loader_xprompts.py +189 -0
  623. sase-0.1.0/tests/test_workflow_loaders.py +68 -0
  624. sase-0.1.0/tests/test_workflow_models.py +192 -0
  625. sase-0.1.0/tests/test_workflow_operations.py +225 -0
  626. sase-0.1.0/tests/test_workflow_utils.py +438 -0
  627. sase-0.1.0/tests/test_workflow_validator_inputs.py +131 -0
  628. sase-0.1.0/tests/test_workflow_validator_outputs.py +286 -0
  629. sase-0.1.0/tests/test_workflow_validator_xprompt_calls.py +380 -0
  630. sase-0.1.0/tests/test_workflows_runner.py +456 -0
  631. sase-0.1.0/tests/test_workspace_changespec.py +173 -0
  632. sase-0.1.0/tests/test_workspace_input_modal.py +42 -0
  633. sase-0.1.0/tests/test_wraps_all.py +364 -0
  634. sase-0.1.0/tests/test_xprompt_jinja_and_standalone.py +609 -0
  635. sase-0.1.0/tests/test_xprompt_loader_config.py +432 -0
  636. sase-0.1.0/tests/test_xprompt_loader_parsing.py +176 -0
  637. sase-0.1.0/tests/test_xprompt_loader_shortform.py +357 -0
  638. sase-0.1.0/tests/test_xprompt_models.py +354 -0
  639. sase-0.1.0/tests/test_xprompt_parsing.py +581 -0
  640. sase-0.1.0/tests/test_xprompt_processor_args.py +270 -0
  641. sase-0.1.0/tests/test_xprompt_processor_pattern.py +169 -0
  642. sase-0.1.0/tests/test_xprompt_processor_shorthand.py +137 -0
  643. sase-0.1.0/tests/test_xprompt_processor_workflow.py +168 -0
  644. sase-0.1.0/tools/AGENTS.md +34 -0
  645. sase-0.1.0/tools/CLAUDE.md +1 -0
  646. sase-0.1.0/tools/GEMINI.md +1 -0
  647. sase-0.1.0/tools/bam-260221 +48 -0
  648. sase-0.1.0/tools/pylimit-260221 +170 -0
  649. sase-0.1.0/tools/pyvision-260221 +581 -0
  650. sase-0.1.0/tools/sase_bd +73 -0
  651. sase-0.1.0/tools/sase_stop_hook +192 -0
  652. sase-0.1.0/tools/sase_xcmd +45 -0
  653. sase-0.1.0/tools/tmux_ring_bell-260221 +44 -0
  654. sase-0.1.0/tox.ini +8 -0
  655. sase-0.1.0/uv.lock +1783 -0
  656. sase-0.1.0/xprompts/commit.yml +95 -0
  657. sase-0.1.0/xprompts/eval_ifs_loops.yml +141 -0
  658. sase-0.1.0/xprompts/eval_parallel.yml +133 -0
  659. sase-0.1.0/xprompts/file.yml +37 -0
  660. sase-0.1.0/xprompts/fix_hook.md +22 -0
  661. sase-0.1.0/xprompts/git.yml +85 -0
  662. sase-0.1.0/xprompts/json.yml +47 -0
  663. sase-0.1.0/xprompts/mentor.md +32 -0
  664. sase-0.1.0/xprompts/resume.yml +26 -0
  665. sase-0.1.0/xprompts/split.yml +66 -0
  666. sase-0.1.0/xprompts/split_executor.md +51 -0
  667. sase-0.1.0/xprompts/split_spec_generator.md +50 -0
  668. sase-0.1.0/xprompts/summarize.md +9 -0
  669. sase-0.1.0/xprompts/sync.yml +74 -0
  670. sase-0.1.0/xprompts/workflow.schema.json +506 -0
@@ -0,0 +1,52 @@
1
+ # SQLite databases
2
+ *.db
3
+ *.db?*
4
+ *.db-journal
5
+ *.db-wal
6
+ *.db-shm
7
+
8
+ # Daemon runtime files
9
+ daemon.lock
10
+ daemon.log
11
+ daemon-*.log.gz
12
+ daemon.pid
13
+ bd.sock
14
+ sync-state.json
15
+ last-touched
16
+
17
+ # Local version tracking (prevents upgrade notification spam after git ops)
18
+ .local_version
19
+
20
+ # Legacy database files
21
+ db.sqlite
22
+ bd.db
23
+
24
+ # Worktree redirect file (contains relative path to main repo's .beads/)
25
+ # Must not be committed as paths would be wrong in other clones
26
+ redirect
27
+
28
+ # Merge artifacts (temporary files from 3-way merge)
29
+ beads.base.jsonl
30
+ beads.base.meta.json
31
+ beads.left.jsonl
32
+ beads.left.meta.json
33
+ beads.right.jsonl
34
+ beads.right.meta.json
35
+
36
+ # Sync state (local-only, per-machine)
37
+ # These files are machine-specific and should not be shared across clones
38
+ .sync.lock
39
+ .jsonl.lock
40
+ sync_base.jsonl
41
+ export-state/
42
+
43
+ # Dolt database (managed by Dolt remotes, not git)
44
+ dolt/
45
+ dolt-access.lock
46
+ dolt.*.corrupt.backup/
47
+
48
+ # NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here.
49
+ # They would override fork protection in .git/info/exclude, allowing
50
+ # contributors to accidentally commit upstream issue databases.
51
+ # The JSONL files (issues.jsonl, interactions.jsonl) and config files
52
+ # are tracked by git by default since no pattern above ignores them.
@@ -0,0 +1,86 @@
1
+ # Beads Workflow Context
2
+
3
+ > **Context Recovery**: Run `sase_bd prime` after compaction, clear, or new session Hooks auto-call this in Claude Code
4
+ > when .beads/ detected
5
+
6
+ > **Important**: Always use `sase_bd` (at `tools/sase_bd`) instead of `bd` directly.
7
+
8
+ # Session Close Protocol
9
+
10
+ Before wrapping up, run `sase_bd sync` to ensure beads data is flushed to JSONL.
11
+
12
+ **Do NOT commit or push code changes.** The stop hook handles commit prompting — it runs quality checks and then asks
13
+ you to use the `/commit` skill if there are uncommitted changes.
14
+
15
+ ## Core Rules
16
+
17
+ - **Default**: Use beads for ALL task tracking (`sase_bd create`, `sase_bd ready`, `sase_bd close`)
18
+ - **Prohibited**: Do NOT use TodoWrite, TaskCreate, or markdown files for task tracking
19
+ - **Workflow**: Create beads issue BEFORE writing code, mark in_progress when starting
20
+ - Persistence you don't need beats lost context
21
+ - Git workflow: hooks auto-sync, run `sase_bd sync` at session end
22
+ - Session management: check `sase_bd ready` for available work
23
+
24
+ ## Essential Commands
25
+
26
+ ### Finding Work
27
+
28
+ - `sase_bd ready` - Show issues ready to work (no blockers)
29
+ - `sase_bd list --status=open` - All open issues
30
+ - `sase_bd list --status=in_progress` - Your active work
31
+ - `sase_bd show <id>` - Detailed issue view with dependencies
32
+
33
+ ### Creating & Updating
34
+
35
+ - `sase_bd create --title="..." --type=task|bug|feature --priority=2` - New issue
36
+ - Priority: 0-4 or P0-P4 (0=critical, 2=medium, 4=backlog). NOT "high"/"medium"/"low"
37
+ - `sase_bd update <id> --status=in_progress` - Claim work
38
+ - `sase_bd update <id> --assignee=username` - Assign to someone
39
+ - `sase_bd update <id> --title/--description/--notes/--design` - Update fields inline
40
+ - `sase_bd close <id>` - Mark complete
41
+ - `sase_bd close <id1> <id2> ...` - Close multiple issues at once (more efficient)
42
+ - `sase_bd close <id> --reason="explanation"` - Close with reason
43
+ - **Tip**: When creating multiple issues/tasks/epics, use parallel subagents for efficiency
44
+ - **WARNING**: Do NOT use `sase_bd edit` - it opens $EDITOR (vim/nano) which blocks agents
45
+
46
+ ### Dependencies & Blocking
47
+
48
+ - `sase_bd dep add <issue> <depends-on>` - Add dependency (issue depends on depends-on)
49
+ - `sase_bd blocked` - Show all blocked issues
50
+ - `sase_bd show <id>` - See what's blocking/blocked by this issue
51
+
52
+ ### Sync & Collaboration
53
+
54
+ - `sase_bd sync` - Sync with git remote (run at session end)
55
+ - `sase_bd sync --status` - Check sync status without syncing
56
+
57
+ ### Project Health
58
+
59
+ - `sase_bd stats` - Project statistics (open/closed/blocked counts)
60
+ - `sase_bd doctor` - Check for issues (sync problems, missing hooks)
61
+
62
+ ## Common Workflows
63
+
64
+ **Starting work:**
65
+
66
+ ```bash
67
+ sase_bd ready # Find available work
68
+ sase_bd show <id> # Review issue details
69
+ sase_bd update <id> --status=in_progress # Claim it
70
+ ```
71
+
72
+ **Completing work:**
73
+
74
+ ```bash
75
+ sase_bd close <id1> <id2> ... # Close all completed issues at once
76
+ sase_bd sync # Push to remote
77
+ ```
78
+
79
+ **Creating dependent work:**
80
+
81
+ ```bash
82
+ # Run sase_bd create commands in parallel (use subagents for many items)
83
+ sase_bd create --title="Implement feature X" --type=feature
84
+ sase_bd create --title="Write tests for X" --type=task
85
+ sase_bd dep add beads-yyy beads-xxx # Tests depend on Feature (Feature blocks tests)
86
+ ```
@@ -0,0 +1,87 @@
1
+ # Beads - AI-Native Issue Tracking
2
+
3
+ Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly
4
+ in your codebase alongside your code.
5
+
6
+ ## What is Beads?
7
+
8
+ Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their
9
+ issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
10
+
11
+ **Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
12
+
13
+ ## Quick Start
14
+
15
+ ### Essential Commands
16
+
17
+ ```bash
18
+ # Create new issues
19
+ bd create "Add user authentication"
20
+
21
+ # View all issues
22
+ bd list
23
+
24
+ # View issue details
25
+ bd show <issue-id>
26
+
27
+ # Update issue status
28
+ bd update <issue-id> --status in_progress
29
+ bd update <issue-id> --status done
30
+
31
+ # Sync with git remote
32
+ bd sync
33
+ ```
34
+
35
+ ### Working with Issues
36
+
37
+ Issues in Beads are:
38
+
39
+ - **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
40
+ - **AI-friendly**: CLI-first design works perfectly with AI coding agents
41
+ - **Branch-aware**: Issues can follow your branch workflow
42
+ - **Always in sync**: Auto-syncs with your commits
43
+
44
+ ## Why Beads?
45
+
46
+ ✨ **AI-Native Design**
47
+
48
+ - Built specifically for AI-assisted development workflows
49
+ - CLI-first interface works seamlessly with AI coding agents
50
+ - No context switching to web UIs
51
+
52
+ 🚀 **Developer Focused**
53
+
54
+ - Issues live in your repo, right next to your code
55
+ - Works offline, syncs when you push
56
+ - Fast, lightweight, and stays out of your way
57
+
58
+ 🔧 **Git Integration**
59
+
60
+ - Automatic sync with git commits
61
+ - Branch-aware issue tracking
62
+ - Intelligent JSONL merge resolution
63
+
64
+ ## Get Started with Beads
65
+
66
+ Try Beads in your own projects:
67
+
68
+ ```bash
69
+ # Install Beads
70
+ curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
71
+
72
+ # Initialize in your repo
73
+ bd init
74
+
75
+ # Create your first issue
76
+ bd create "Try out Beads"
77
+ ```
78
+
79
+ ## Learn More
80
+
81
+ - **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
82
+ - **Quick Start Guide**: Run `bd quickstart`
83
+ - **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
84
+
85
+ ---
86
+
87
+ _Beads: Issue tracking that moves at the speed of thought_ ⚡
@@ -0,0 +1,67 @@
1
+ # Beads Configuration File
2
+ # This file configures default behavior for all bd commands in this repository
3
+ # All settings can also be set via environment variables (BD_* prefix)
4
+ # or overridden with command-line flags
5
+
6
+ # Issue prefix for this repository (used by bd init)
7
+ # If not set, bd init will auto-detect from directory name
8
+ # Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
9
+ # issue-prefix: ""
10
+
11
+ # Use no-db mode: load from JSONL, no SQLite, write back after each command
12
+ # When true, bd will use .beads/issues.jsonl as the source of truth
13
+ # instead of SQLite database
14
+ # no-db: false
15
+
16
+ # Disable daemon for RPC communication (forces direct database access)
17
+ # no-daemon: false
18
+
19
+ # Disable auto-flush of database to JSONL after mutations
20
+ # no-auto-flush: false
21
+
22
+ # Disable auto-import from JSONL when it's newer than database
23
+ # no-auto-import: false
24
+
25
+ # Enable JSON output by default
26
+ # json: false
27
+
28
+ # Default actor for audit trails (overridden by BD_ACTOR or --actor)
29
+ # actor: ""
30
+
31
+ # Path to database (overridden by BEADS_DB or --db)
32
+ # db: ""
33
+
34
+ # Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
35
+ # auto-start-daemon: true
36
+
37
+ # Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
38
+ # flush-debounce: "5s"
39
+
40
+ # Export events (audit trail) to .beads/events.jsonl on each flush/sync
41
+ # When enabled, new events are appended incrementally using a high-water mark.
42
+ # Use 'bd export --events' to trigger manually regardless of this setting.
43
+ # events-export: false
44
+
45
+ # Git branch for beads commits (bd sync will commit to this branch)
46
+ # IMPORTANT: Set this for team projects so all clones use the same sync branch.
47
+ # This setting persists across clones (unlike database config which is gitignored).
48
+ # Can also use BEADS_SYNC_BRANCH env var for local override.
49
+ # If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
50
+ # sync-branch: "beads-sync"
51
+
52
+ # Multi-repo configuration (experimental - bd-307)
53
+ # Allows hydrating from multiple repositories and routing writes to the correct JSONL
54
+ # repos:
55
+ # primary: "." # Primary repo (where this database lives)
56
+ # additional: # Additional repos to hydrate from (read-only)
57
+ # - ~/beads-planning # Personal planning repo
58
+ # - ~/work-planning # Work planning repo
59
+
60
+ # Integration settings (access with 'bd config get/set')
61
+ # These are stored in the database, not in this file:
62
+ # - jira.url
63
+ # - jira.project
64
+ # - linear.url
65
+ # - linear.api-key
66
+ # - github.org
67
+ # - github.repo
File without changes