sisyphi 1.1.18 → 1.1.23

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 (248) hide show
  1. package/README.md +195 -75
  2. package/deploy/aws/main.tf +121 -0
  3. package/deploy/aws/outputs.tf +18 -0
  4. package/deploy/aws/variables.tf +69 -0
  5. package/deploy/aws/versions.tf +16 -0
  6. package/deploy/hetzner/.terraform.lock.hcl +23 -0
  7. package/deploy/hetzner/main.tf +69 -0
  8. package/deploy/hetzner/outputs.tf +18 -0
  9. package/deploy/hetzner/variables.tf +57 -0
  10. package/deploy/hetzner/versions.tf +15 -0
  11. package/deploy/shared/bin/pbcopy-shim +5 -0
  12. package/deploy/shared/bin/pbpaste-shim +4 -0
  13. package/deploy/shared/cloud-init.yaml.tpl +119 -0
  14. package/deploy/shared/sisyphusd.service.tpl +17 -0
  15. package/deploy/shared/tmux-osc52.conf +10 -0
  16. package/dist/cli.js +8406 -1522
  17. package/dist/cli.js.map +1 -1
  18. package/dist/daemon.js +7137 -1398
  19. package/dist/daemon.js.map +1 -1
  20. package/dist/deploy/aws/main.tf +121 -0
  21. package/dist/deploy/aws/outputs.tf +18 -0
  22. package/dist/deploy/aws/variables.tf +69 -0
  23. package/dist/deploy/aws/versions.tf +16 -0
  24. package/dist/deploy/hetzner/.terraform.lock.hcl +23 -0
  25. package/dist/deploy/hetzner/main.tf +69 -0
  26. package/dist/deploy/hetzner/outputs.tf +18 -0
  27. package/dist/deploy/hetzner/variables.tf +57 -0
  28. package/dist/deploy/hetzner/versions.tf +15 -0
  29. package/dist/deploy/shared/bin/pbcopy-shim +5 -0
  30. package/dist/deploy/shared/bin/pbpaste-shim +4 -0
  31. package/dist/deploy/shared/cloud-init.yaml.tpl +119 -0
  32. package/dist/deploy/shared/sisyphusd.service.tpl +17 -0
  33. package/dist/deploy/shared/tmux-osc52.conf +10 -0
  34. package/dist/templates/CLAUDE.md +1 -56
  35. package/dist/templates/agent-plugin/agents/CLAUDE.md +2 -65
  36. package/dist/templates/agent-plugin/agents/debug.md +43 -6
  37. package/dist/templates/agent-plugin/agents/debug.settings.json +57 -0
  38. package/dist/templates/agent-plugin/agents/explore.md +28 -1
  39. package/dist/templates/agent-plugin/agents/explore.settings.json +57 -0
  40. package/dist/templates/agent-plugin/agents/implementor.md +94 -0
  41. package/dist/templates/agent-plugin/agents/implementor.settings.json +57 -0
  42. package/dist/templates/agent-plugin/agents/operator.md +43 -1
  43. package/dist/templates/agent-plugin/agents/operator.settings.json +57 -0
  44. package/dist/templates/agent-plugin/agents/plan/sub-planner.md +75 -0
  45. package/dist/templates/agent-plugin/agents/plan.md +176 -86
  46. package/dist/templates/agent-plugin/agents/plan.settings.json +57 -0
  47. package/dist/templates/agent-plugin/agents/problem/adversarial.md +26 -0
  48. package/dist/templates/agent-plugin/agents/problem/contrarian.md +26 -0
  49. package/dist/templates/agent-plugin/agents/problem/first-principles.md +26 -0
  50. package/dist/templates/agent-plugin/agents/problem/precedent.md +25 -0
  51. package/dist/templates/agent-plugin/agents/problem/simplifier.md +26 -0
  52. package/dist/templates/agent-plugin/agents/problem/systems-thinker.md +26 -0
  53. package/dist/templates/agent-plugin/agents/problem/time-traveler.md +26 -0
  54. package/dist/templates/agent-plugin/agents/problem/user-empathy.md +26 -0
  55. package/dist/templates/agent-plugin/agents/problem.md +334 -79
  56. package/dist/templates/agent-plugin/agents/problem.settings.json +57 -0
  57. package/dist/templates/agent-plugin/agents/research-lead/CLAUDE.md +26 -0
  58. package/dist/templates/agent-plugin/agents/research-lead/critic.md +61 -0
  59. package/dist/templates/agent-plugin/agents/research-lead/researcher.md +60 -0
  60. package/dist/templates/agent-plugin/agents/research-lead.md +184 -0
  61. package/dist/templates/agent-plugin/agents/research-lead.settings.json +57 -0
  62. package/dist/templates/agent-plugin/agents/review/CLAUDE.md +3 -29
  63. package/dist/templates/agent-plugin/agents/review/compliance.md +14 -3
  64. package/dist/templates/agent-plugin/agents/review/efficiency.md +15 -4
  65. package/dist/templates/agent-plugin/agents/review/quality.md +20 -6
  66. package/dist/templates/agent-plugin/agents/review/reuse.md +17 -5
  67. package/dist/templates/agent-plugin/agents/review/security.md +10 -3
  68. package/dist/templates/agent-plugin/agents/review/tests.md +58 -0
  69. package/dist/templates/agent-plugin/agents/review-plan/CLAUDE.md +28 -0
  70. package/dist/templates/agent-plugin/agents/review-plan/code-smells.md +4 -2
  71. package/dist/templates/agent-plugin/agents/review-plan/pattern-consistency.md +4 -2
  72. package/dist/templates/agent-plugin/agents/review-plan/requirements-coverage.md +3 -1
  73. package/dist/templates/agent-plugin/agents/review-plan/security.md +5 -2
  74. package/dist/templates/agent-plugin/agents/review-plan.md +52 -5
  75. package/dist/templates/agent-plugin/agents/review-plan.settings.json +57 -0
  76. package/dist/templates/agent-plugin/agents/review.md +89 -16
  77. package/dist/templates/agent-plugin/agents/review.settings.json +57 -0
  78. package/dist/templates/agent-plugin/agents/spec/engineer.md +175 -0
  79. package/dist/templates/agent-plugin/agents/spec/requirements-writer.md +149 -0
  80. package/dist/templates/agent-plugin/agents/spec.md +444 -0
  81. package/dist/templates/agent-plugin/agents/spec.settings.json +57 -0
  82. package/dist/templates/agent-plugin/agents/test-spec.md +58 -2
  83. package/dist/templates/agent-plugin/agents/test-spec.settings.json +57 -0
  84. package/dist/templates/agent-plugin/hooks/CLAUDE.md +9 -57
  85. package/dist/templates/agent-plugin/hooks/ask-background-guard.sh +57 -0
  86. package/dist/templates/agent-plugin/hooks/intercept-send-message.sh +1 -1
  87. package/dist/templates/agent-plugin/hooks/plan-user-prompt.sh +8 -7
  88. package/dist/templates/agent-plugin/hooks/plan-validate.sh +97 -0
  89. package/dist/templates/agent-plugin/hooks/plan-write-path.sh +55 -0
  90. package/dist/templates/agent-plugin/hooks/problem-user-prompt.sh +26 -0
  91. package/dist/templates/agent-plugin/hooks/register-bg-task.sh +37 -0
  92. package/dist/templates/agent-plugin/hooks/require-submit.sh +51 -42
  93. package/dist/templates/agent-plugin/hooks/review-user-prompt.sh +6 -2
  94. package/dist/templates/agent-plugin/hooks/spec-user-prompt.sh +43 -0
  95. package/dist/templates/agent-plugin/skills/humanloop/SKILL.md +147 -0
  96. package/dist/templates/agent-plugin/skills/perspective-fanout/SKILL.md +115 -0
  97. package/dist/templates/agent-plugin/skills/problem-document/SKILL.md +105 -0
  98. package/dist/templates/agent-plugin/skills/problem-plateau-breakers/SKILL.md +83 -0
  99. package/dist/templates/agent-suffix.md +7 -4
  100. package/dist/templates/baleia.lua +42 -0
  101. package/dist/templates/companion-plugin/hooks/user-prompt-context.sh +1 -1
  102. package/dist/templates/dashboard-claude.md +7 -3
  103. package/dist/templates/orchestrator-base.md +89 -52
  104. package/dist/templates/orchestrator-completion.md +47 -24
  105. package/dist/templates/orchestrator-discovery.md +183 -0
  106. package/dist/templates/orchestrator-impl.md +47 -18
  107. package/dist/templates/orchestrator-planning.md +109 -20
  108. package/dist/templates/orchestrator-plugin/commands/sisyphus/scratch.md +19 -0
  109. package/dist/templates/orchestrator-plugin/commands/sisyphus/spec.md +11 -0
  110. package/dist/templates/orchestrator-plugin/commands/sisyphus/strategize.md +5 -5
  111. package/dist/templates/orchestrator-plugin/hooks/hooks.json +0 -10
  112. package/dist/templates/orchestrator-plugin/skills/humanloop/SKILL.md +149 -0
  113. package/dist/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -0
  114. package/dist/templates/orchestrator-plugin/skills/orchestration/SKILL.md +2 -1
  115. package/dist/templates/orchestrator-plugin/skills/orchestration/strategy.md +160 -0
  116. package/dist/templates/orchestrator-plugin/skills/orchestration/task-patterns.md +26 -28
  117. package/dist/templates/orchestrator-plugin/skills/orchestration/workflow-examples.md +133 -25
  118. package/dist/templates/orchestrator-settings.json +55 -0
  119. package/dist/templates/orchestrator-validation.md +17 -14
  120. package/dist/templates/sisyphus-init.lua +30 -0
  121. package/dist/templates/sisyphus-tmux-plugin/hooks/hooks.json +54 -0
  122. package/dist/templates/sisyphus-tmux-plugin/hooks/tmux-state.sh +19 -0
  123. package/dist/templates/termrender-haiku-system.md +82 -0
  124. package/dist/templates/whip-animation.sh +345 -0
  125. package/dist/tui.js +6711 -2928
  126. package/dist/tui.js.map +1 -1
  127. package/native/SisyphusNotify/main.swift +15 -5
  128. package/native/build-notify.sh +23 -0
  129. package/package.json +11 -8
  130. package/templates/CLAUDE.md +1 -56
  131. package/templates/agent-plugin/agents/CLAUDE.md +2 -65
  132. package/templates/agent-plugin/agents/debug.md +43 -6
  133. package/templates/agent-plugin/agents/debug.settings.json +57 -0
  134. package/templates/agent-plugin/agents/explore.md +28 -1
  135. package/templates/agent-plugin/agents/explore.settings.json +57 -0
  136. package/templates/agent-plugin/agents/implementor.md +94 -0
  137. package/templates/agent-plugin/agents/implementor.settings.json +57 -0
  138. package/templates/agent-plugin/agents/operator.md +43 -1
  139. package/templates/agent-plugin/agents/operator.settings.json +57 -0
  140. package/templates/agent-plugin/agents/plan/sub-planner.md +75 -0
  141. package/templates/agent-plugin/agents/plan.md +176 -86
  142. package/templates/agent-plugin/agents/plan.settings.json +57 -0
  143. package/templates/agent-plugin/agents/problem/adversarial.md +26 -0
  144. package/templates/agent-plugin/agents/problem/contrarian.md +26 -0
  145. package/templates/agent-plugin/agents/problem/first-principles.md +26 -0
  146. package/templates/agent-plugin/agents/problem/precedent.md +25 -0
  147. package/templates/agent-plugin/agents/problem/simplifier.md +26 -0
  148. package/templates/agent-plugin/agents/problem/systems-thinker.md +26 -0
  149. package/templates/agent-plugin/agents/problem/time-traveler.md +26 -0
  150. package/templates/agent-plugin/agents/problem/user-empathy.md +26 -0
  151. package/templates/agent-plugin/agents/problem.md +334 -79
  152. package/templates/agent-plugin/agents/problem.settings.json +57 -0
  153. package/templates/agent-plugin/agents/research-lead/CLAUDE.md +26 -0
  154. package/templates/agent-plugin/agents/research-lead/critic.md +61 -0
  155. package/templates/agent-plugin/agents/research-lead/researcher.md +60 -0
  156. package/templates/agent-plugin/agents/research-lead.md +184 -0
  157. package/templates/agent-plugin/agents/research-lead.settings.json +57 -0
  158. package/templates/agent-plugin/agents/review/CLAUDE.md +3 -29
  159. package/templates/agent-plugin/agents/review/compliance.md +14 -3
  160. package/templates/agent-plugin/agents/review/efficiency.md +15 -4
  161. package/templates/agent-plugin/agents/review/quality.md +20 -6
  162. package/templates/agent-plugin/agents/review/reuse.md +17 -5
  163. package/templates/agent-plugin/agents/review/security.md +10 -3
  164. package/templates/agent-plugin/agents/review/tests.md +58 -0
  165. package/templates/agent-plugin/agents/review-plan/CLAUDE.md +28 -0
  166. package/templates/agent-plugin/agents/review-plan/code-smells.md +4 -2
  167. package/templates/agent-plugin/agents/review-plan/pattern-consistency.md +4 -2
  168. package/templates/agent-plugin/agents/review-plan/requirements-coverage.md +3 -1
  169. package/templates/agent-plugin/agents/review-plan/security.md +5 -2
  170. package/templates/agent-plugin/agents/review-plan.md +52 -5
  171. package/templates/agent-plugin/agents/review-plan.settings.json +57 -0
  172. package/templates/agent-plugin/agents/review.md +89 -16
  173. package/templates/agent-plugin/agents/review.settings.json +57 -0
  174. package/templates/agent-plugin/agents/spec/engineer.md +175 -0
  175. package/templates/agent-plugin/agents/spec/requirements-writer.md +149 -0
  176. package/templates/agent-plugin/agents/spec.md +444 -0
  177. package/templates/agent-plugin/agents/spec.settings.json +57 -0
  178. package/templates/agent-plugin/agents/test-spec.md +58 -2
  179. package/templates/agent-plugin/agents/test-spec.settings.json +57 -0
  180. package/templates/agent-plugin/hooks/CLAUDE.md +9 -57
  181. package/templates/agent-plugin/hooks/ask-background-guard.sh +57 -0
  182. package/templates/agent-plugin/hooks/intercept-send-message.sh +1 -1
  183. package/templates/agent-plugin/hooks/plan-user-prompt.sh +8 -7
  184. package/templates/agent-plugin/hooks/plan-validate.sh +97 -0
  185. package/templates/agent-plugin/hooks/plan-write-path.sh +55 -0
  186. package/templates/agent-plugin/hooks/problem-user-prompt.sh +26 -0
  187. package/templates/agent-plugin/hooks/register-bg-task.sh +37 -0
  188. package/templates/agent-plugin/hooks/require-submit.sh +51 -42
  189. package/templates/agent-plugin/hooks/review-user-prompt.sh +6 -2
  190. package/templates/agent-plugin/hooks/spec-user-prompt.sh +43 -0
  191. package/templates/agent-plugin/skills/humanloop/SKILL.md +147 -0
  192. package/templates/agent-plugin/skills/perspective-fanout/SKILL.md +115 -0
  193. package/templates/agent-plugin/skills/problem-document/SKILL.md +105 -0
  194. package/templates/agent-plugin/skills/problem-plateau-breakers/SKILL.md +83 -0
  195. package/templates/agent-suffix.md +7 -4
  196. package/templates/baleia.lua +42 -0
  197. package/templates/companion-plugin/hooks/user-prompt-context.sh +1 -1
  198. package/templates/dashboard-claude.md +7 -3
  199. package/templates/orchestrator-base.md +89 -52
  200. package/templates/orchestrator-completion.md +47 -24
  201. package/templates/orchestrator-discovery.md +183 -0
  202. package/templates/orchestrator-impl.md +47 -18
  203. package/templates/orchestrator-planning.md +109 -20
  204. package/templates/orchestrator-plugin/commands/sisyphus/scratch.md +19 -0
  205. package/templates/orchestrator-plugin/commands/sisyphus/spec.md +11 -0
  206. package/templates/orchestrator-plugin/commands/sisyphus/strategize.md +5 -5
  207. package/templates/orchestrator-plugin/hooks/hooks.json +0 -10
  208. package/templates/orchestrator-plugin/skills/humanloop/SKILL.md +149 -0
  209. package/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -0
  210. package/templates/orchestrator-plugin/skills/orchestration/SKILL.md +2 -1
  211. package/templates/orchestrator-plugin/skills/orchestration/strategy.md +160 -0
  212. package/templates/orchestrator-plugin/skills/orchestration/task-patterns.md +26 -28
  213. package/templates/orchestrator-plugin/skills/orchestration/workflow-examples.md +133 -25
  214. package/templates/orchestrator-settings.json +55 -0
  215. package/templates/orchestrator-validation.md +17 -14
  216. package/templates/sisyphus-init.lua +30 -0
  217. package/templates/sisyphus-tmux-plugin/hooks/hooks.json +54 -0
  218. package/templates/sisyphus-tmux-plugin/hooks/tmux-state.sh +19 -0
  219. package/templates/termrender-haiku-system.md +82 -0
  220. package/templates/whip-animation.sh +345 -0
  221. package/dist/chunk-22ZGZTGY.js +0 -67
  222. package/dist/chunk-22ZGZTGY.js.map +0 -1
  223. package/dist/chunk-6PJVJEYQ.js +0 -46
  224. package/dist/chunk-6PJVJEYQ.js.map +0 -1
  225. package/dist/chunk-C2XKXERJ.js +0 -1052
  226. package/dist/chunk-C2XKXERJ.js.map +0 -1
  227. package/dist/chunk-TMBAVPHH.js +0 -129
  228. package/dist/chunk-TMBAVPHH.js.map +0 -1
  229. package/dist/chunk-V36NXMHP.js +0 -299
  230. package/dist/chunk-V36NXMHP.js.map +0 -1
  231. package/dist/paths-XRDEEJ5R.js +0 -66
  232. package/dist/paths-XRDEEJ5R.js.map +0 -1
  233. package/dist/templates/agent-plugin/agents/design.md +0 -134
  234. package/dist/templates/agent-plugin/agents/requirements.md +0 -138
  235. package/dist/templates/begin.md +0 -22
  236. package/dist/templates/nvim-tutorial.txt +0 -68
  237. package/dist/templates/orchestrator-plugin/commands/sisyphus/design.md +0 -13
  238. package/dist/templates/orchestrator-plugin/commands/sisyphus/requirements.md +0 -13
  239. package/dist/templates/orchestrator-plugin/hooks/idle-notify.sh +0 -71
  240. package/dist/templates/orchestrator-strategy.md +0 -238
  241. package/templates/agent-plugin/agents/design.md +0 -134
  242. package/templates/agent-plugin/agents/requirements.md +0 -138
  243. package/templates/begin.md +0 -22
  244. package/templates/nvim-tutorial.txt +0 -68
  245. package/templates/orchestrator-plugin/commands/sisyphus/design.md +0 -13
  246. package/templates/orchestrator-plugin/commands/sisyphus/requirements.md +0 -13
  247. package/templates/orchestrator-plugin/hooks/idle-notify.sh +0 -71
  248. package/templates/orchestrator-strategy.md +0 -238
@@ -0,0 +1,30 @@
1
+ -- ~/.config/sisyphus/init.lua
2
+ -- Loaded only when nvim is invoked as `NVIM_APPNAME=sisyphus nvim ...` (compose popup).
3
+
4
+ vim.opt.swapfile = false
5
+ vim.opt.backup = false
6
+ vim.opt.writebackup = false
7
+ vim.opt.undofile = false
8
+ vim.opt.signcolumn = 'no'
9
+ vim.opt.number = false
10
+ vim.opt.relativenumber = false
11
+ vim.opt.wrap = true
12
+ vim.opt.linebreak = true
13
+
14
+ -- Force markdown filetype (compose temp files are .md)
15
+ vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead' }, {
16
+ pattern = '*',
17
+ callback = function() vim.bo.filetype = 'markdown' end,
18
+ })
19
+
20
+ -- Enter insert mode automatically when the buffer opens.
21
+ vim.api.nvim_create_autocmd({ 'BufWinEnter' }, {
22
+ pattern = '*',
23
+ callback = function() vim.cmd('startinsert') end,
24
+ })
25
+
26
+ -- :w autosaves and quits. :q without :w cancels.
27
+ vim.api.nvim_create_autocmd('BufWritePost', {
28
+ pattern = '*',
29
+ callback = function() vim.cmd('quit!') end,
30
+ })
@@ -0,0 +1,54 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/tmux-state.sh idle"
9
+ }
10
+ ]
11
+ }
12
+ ],
13
+ "UserPromptSubmit": [
14
+ {
15
+ "hooks": [
16
+ {
17
+ "type": "command",
18
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/tmux-state.sh processing"
19
+ }
20
+ ]
21
+ }
22
+ ],
23
+ "Stop": [
24
+ {
25
+ "hooks": [
26
+ {
27
+ "type": "command",
28
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/tmux-state.sh stopped"
29
+ }
30
+ ]
31
+ }
32
+ ],
33
+ "SubagentStop": [
34
+ {
35
+ "hooks": [
36
+ {
37
+ "type": "command",
38
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/tmux-state.sh stopped"
39
+ }
40
+ ]
41
+ }
42
+ ],
43
+ "SessionEnd": [
44
+ {
45
+ "hooks": [
46
+ {
47
+ "type": "command",
48
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/tmux-state.sh cleanup"
49
+ }
50
+ ]
51
+ }
52
+ ]
53
+ }
54
+ }
@@ -0,0 +1,19 @@
1
+ #!/bin/bash
2
+ # Writes Claude session state to /tmp/claude-tmux-state/<pane_id>
3
+ # Usage: tmux-state.sh <idle|processing|stopped|cleanup>
4
+
5
+ pane_id="${TMUX_PANE}"
6
+ [ -z "$pane_id" ] && exit 0
7
+
8
+ STATE_DIR="/tmp/claude-tmux-state"
9
+ pane_file="${STATE_DIR}/${pane_id#%}"
10
+
11
+ case "$1" in
12
+ idle|processing|stopped)
13
+ mkdir -p "$STATE_DIR"
14
+ echo "$1" > "$pane_file"
15
+ ;;
16
+ cleanup)
17
+ rm -f "$pane_file"
18
+ ;;
19
+ esac
@@ -0,0 +1,82 @@
1
+ # Role
2
+
3
+ You generate dense, terminal-width termrender visuals for sisyphus ask questions.
4
+ Your output is exactly one `attach_visual` call with the final markdown.
5
+ Read code or files via `read_file` if needed. Do not speculate about file contents.
6
+
7
+ # Tools
8
+
9
+ **read_file** — `read_file({ path: "relative/path/to/file.ts" })`
10
+
11
+ - Path relative to session cwd. Absolute paths and symlinks rejected.
12
+ - Reads >50 KB truncated with `…[truncated]` marker.
13
+ - Read 0–3 files at most.
14
+
15
+ **attach_visual** — `attach_visual({ content: "<termrender markdown>" })`
16
+
17
+ - Call exactly once with your final markdown.
18
+ - Validated via `termrender --check` before writing — a failed check costs a turn.
19
+ - Do not call it until content is fully composed.
20
+
21
+ # Termrender Directive Reference
22
+
23
+ Each directive opens with `:::name{attrs}` and closes with `:::` (matching colon count).
24
+
25
+ ## Panels
26
+
27
+ Open: `:::panel{title="Section Title" color="cyan"}`
28
+ Close: `:::`
29
+
30
+ Colors: `red` `green` `yellow` `blue` `magenta` `cyan` `white` `gray`
31
+
32
+ Content inside panels supports full markdown: **bold**, *italic*, `code`, tables, headings.
33
+
34
+ ## Columns
35
+
36
+ Open: `:::columns`, each column: `:::col{width="50%"}`, close each col with `:::`, close columns with `:::`
37
+
38
+ Columns are side-by-side. Widths should sum to ~100%.
39
+
40
+ ## Tree Views
41
+
42
+ Open: `:::tree`, list paths with indentation, close with `:::`
43
+
44
+ Use for directory structures, call hierarchies, dependency trees.
45
+
46
+ ## Mermaid Diagrams
47
+
48
+ Open: `:::mermaid`, write graph/sequence/state DSL, close with `:::`
49
+
50
+ Renders as ASCII art. Good for flows, decision trees, state machines.
51
+
52
+ Graph example: `graph TD` then `A[Label] --> B{Decision}` then `B -->|yes| C[Action]`
53
+
54
+ ## Inline Formatting
55
+
56
+ - `**bold**` — primary emphasis
57
+ - `*italic*` — secondary
58
+ - `` `code` `` — symbols, filenames, types
59
+ - `# H1` / `## H2` / `### H3` — headings
60
+ - `| col | col |` with `|---|---|` row — tables
61
+ - Cite file locations as `path/to/file.ts:42`
62
+
63
+ # Tone
64
+
65
+ - Terminal-width. Dense. Every line earns its place.
66
+ - Prefer structure (panels, columns, tables, trees) over prose paragraphs.
67
+ - No emojis unless the question explicitly requires visual symbols.
68
+ - Labels should be terse: "Input" not "The input to the function".
69
+
70
+ # Process
71
+
72
+ 1. Read 0–3 files if the question references specific code or paths.
73
+ 2. Compose the visual in one pass: panels for sections, columns for comparisons, tables for options.
74
+ 3. Call `attach_visual` once with the complete markdown.
75
+
76
+ # Failure Mode
77
+
78
+ If a useful visual is not possible (no relevant files, ambiguous question), call `attach_visual` with:
79
+
80
+ `:::panel{title="Visual Unavailable" color="yellow"}` + one-sentence reason + `:::`
81
+
82
+ Do not loop trying to fabricate content.
@@ -0,0 +1,345 @@
1
+ #!/usr/bin/env bash
2
+ # Generated from scripts/whip-frames.json. Edit the JSON, not this file.
3
+ # Whip crack animation — generated from whip-frames.json.
4
+ # Edit JSON waypoints, regenerate with:
5
+ # python3 scripts/whip-render.py scripts/whip-frames.json --emit bash -o scripts/test-whip-animation.sh
6
+ #
7
+ # Convention: ALL frames use 0.04s. Speed encoded as distance per frame.
8
+ #
9
+ # Arm is shoulder → elbow → hand (two explicit segments). Specify elbow per
10
+ # frame for direct artistic control — IK is a fallback only.
11
+
12
+ HEIGHT=12
13
+
14
+ printf '\033[?25l'
15
+ trap 'printf "\033[?25h"' EXIT
16
+
17
+ frame() {
18
+ printf '\033[2J\033[H'
19
+ local row=1
20
+ for line in "$@"; do
21
+ printf '\033[%d;1H%s' "$row" "$line"
22
+ (( row++ ))
23
+ done
24
+ }
25
+
26
+ # F01 REST — hold
27
+ frame \
28
+ "" \
29
+ "" \
30
+ "" \
31
+ "" \
32
+ "" \
33
+ "" \
34
+ "" \
35
+ "⡄" \
36
+ "⠃" \
37
+ "⢀⡠/⢤⡀" \
38
+ "⠋ ⠑⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄" \
39
+ ""
40
+ sleep 0.04
41
+
42
+ # F02 PULL — near-end of whip lifts
43
+ frame \
44
+ "" \
45
+ "" \
46
+ "" \
47
+ "" \
48
+ "" \
49
+ "" \
50
+ "" \
51
+ "⡄" \
52
+ "⠃" \
53
+ "⢀⡠/⠔⠒⠦⠤⣄⣀" \
54
+ "⠋ ⠈⠉⠓⠒⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄" \
55
+ ""
56
+ sleep 0.04
57
+
58
+ # F03 PULL — hand rises 1
59
+ frame \
60
+ "" \
61
+ "" \
62
+ "" \
63
+ "" \
64
+ "" \
65
+ "" \
66
+ "" \
67
+ "⣦" \
68
+ "⡟⢀/⠔⠒⠦⠤⣄⣀⡀" \
69
+ "⣧⠎ ⠉⠙⠒⠦⠤⣄⣀" \
70
+ "⠏ ⠉⠙⠒⠒⠦⠤⠤⠤⠤⠤⠤⠤⠄" \
71
+ ""
72
+ sleep 0.04
73
+
74
+ # F04 PULL — whip midbody lifting
75
+ frame \
76
+ "" \
77
+ "" \
78
+ "" \
79
+ "" \
80
+ "" \
81
+ "" \
82
+ "" \
83
+ "⣦ ⡤⠤⠤⢤⣀⡀" \
84
+ "⡟⢀/⠜ ⠉⠙⠒⠦⠤⢄⣀⡀" \
85
+ "⣧⠎ ⠉⠉⠑⠒⠦⠤⢄⣀⡀" \
86
+ "⠏ ⠈⠉⠑⠒⠆" \
87
+ ""
88
+ sleep 0.04
89
+
90
+ # F05 PULL — hand row 7
91
+ frame \
92
+ "" \
93
+ "" \
94
+ "" \
95
+ "" \
96
+ "" \
97
+ "" \
98
+ " ⡤⠤⠤⠤⣄⣀" \
99
+ "⣴⢰/⠜ ⠈⠉⠓⠦⢤⣀" \
100
+ "⢿⣼⡇ ⠈⠑⠦⣄⡀" \
101
+ "⢸⣿⠃ ⠉⠓⠦⠤⣀⣀" \
102
+ "⢸⣿ ⠈⠉⠉⠓⠒⠆" \
103
+ " ⠛"
104
+ sleep 0.04
105
+
106
+ # F06 PULL — hand row 6
107
+ frame \
108
+ "" \
109
+ "" \
110
+ "" \
111
+ "" \
112
+ "" \
113
+ " ⡤⠤⠤⠤⣄⣀" \
114
+ " ⠠/⠜ ⠈⠉⠓⠦⢤⣀" \
115
+ "⢤ ⣿ ⠈⠙⠲⢤⡀" \
116
+ " ⢣⢻⡆ ⠈⠑⠦⢄⡀" \
117
+ " ⢻⡇ ⠈⠑⠢⢄⡀" \
118
+ " ⠈⠛ ⠈⠑⠆" \
119
+ ""
120
+ sleep 0.04
121
+
122
+ # F07 PULL — hand row 5
123
+ frame \
124
+ "" \
125
+ "" \
126
+ "" \
127
+ "" \
128
+ " ⡤⠤⠤⠤⣄⣀" \
129
+ " /⠜ ⠈⠉⠓⠦⢤⣀" \
130
+ " ⢸⡀ ⠈⠙⠲⢤⡀" \
131
+ "⠤⣄ ⢇ ⠈⠑⠦⢄⡀" \
132
+ " ⠈⠓⢼⡄ ⠈⠑⠢⢄⡀" \
133
+ " ⠈⠑⠆" \
134
+ "" \
135
+ ""
136
+ sleep 0.04
137
+
138
+ # F08 PULL — hand holds, whip rising
139
+ frame \
140
+ "" \
141
+ "" \
142
+ "" \
143
+ " ⣀⡠⠤⠤⠤⠤⠤⠤⣄⣀" \
144
+ " ⣠⠔⠚⠉ ⠈⠉⠓⠦⢤⣀" \
145
+ " /⠜⠁ ⠈⠙⠦⣀" \
146
+ " ⢸⡀ ⠈⢧" \
147
+ "⠤⣄ ⢇ ⡇" \
148
+ " ⠈⠓⢼⡄ ⡇" \
149
+ " ⠇" \
150
+ "" \
151
+ ""
152
+ sleep 0.04
153
+
154
+ # F09 WINDUP — whip arcing up over
155
+ frame \
156
+ "" \
157
+ " ⢀⣠⠤⠤⠤⠤⠤⣄⣀" \
158
+ " ⣠⠔⠊⠁ ⠈⠙⠦⣄" \
159
+ " ⢀⡴⠋ ⠈⢳⡀" \
160
+ " ⣠⠔⠋ ⢧" \
161
+ " /⠜⠁ ⡎" \
162
+ " ⢸⡀ ⢠⠃" \
163
+ "⠤⣄ ⢇ ⠜" \
164
+ " ⠈⠓⢼⡄" \
165
+ "" \
166
+ "" \
167
+ ""
168
+ sleep 0.04
169
+
170
+ # F10 WINDUP — whip curling back
171
+ frame \
172
+ " ⣀⡤⠤⢤⡀" \
173
+ " ⣀⡤⠔⠋⠁ ⢧" \
174
+ " ⣠⠔⠋⠁ ⢸" \
175
+ " ⣠⠞⠁ ⡜" \
176
+ " ⢀⠜⠁ ⡼⠁" \
177
+ " ⠠/⠔⠁ ⠜⠁" \
178
+ " ⣿" \
179
+ "⢤⡀ ⣿" \
180
+ " ⠙⢦⣹⡇" \
181
+ " ⠙⠃" \
182
+ "" \
183
+ ""
184
+ sleep 0.04
185
+
186
+ # F11 PEAK — whip curled, tip trailing behind
187
+ frame \
188
+ " ⣀⡤⠤⢤⡀" \
189
+ " ⣀⡤⠔⠋⠁ ⡇" \
190
+ " ⣠⣴⠯⠕⠒⠒⠲⠤⠤⠔⠚⠁" \
191
+ " ⢠⠔⠒⠦⠤⠔⣲⠟⠁" \
192
+ " ⠜ ⢀⠜⠁" \
193
+ " ⠠/⠔⠁" \
194
+ " ⣿" \
195
+ "⢤⡀ ⣿" \
196
+ " ⠙⢦⣹⡇" \
197
+ " ⠙⠃" \
198
+ "" \
199
+ ""
200
+ sleep 0.04
201
+
202
+ # F12 PEAK — snake-back hold
203
+ frame \
204
+ " ⣀⡤⠤⢤⡀" \
205
+ " ⣀⡤⠔⠋⠁ ⡇" \
206
+ " ⣠⣴⠯⠕⠒⠒⠲⠤⠤⠔⠚⠁" \
207
+ " ⢠⠔⠒⠦⠤⠔⣲⠟⠁" \
208
+ " ⠜ ⢀⠜⠁" \
209
+ " ⠠/⠔⠁" \
210
+ " ⣿" \
211
+ "⢤⡀ ⣿" \
212
+ " ⠙⢦⣹⡇" \
213
+ " ⠙⠃" \
214
+ "" \
215
+ ""
216
+ sleep 0.04
217
+
218
+ # F13 SNAP — FAST, hand jumps to crack position
219
+ frame \
220
+ "" \
221
+ "" \
222
+ "" \
223
+ "" \
224
+ "" \
225
+ "" \
226
+ "" \
227
+ "⠤⣄ ⢀⣠⠤⠔⠒⠒⠒⠒⠒⠒⠒⠦⠤⠤⠤⠤⠤⠤⠤⠄" \
228
+ " ⠈⠓⢤⣀⣀⠤⠤/⠔⠊⠁" \
229
+ "" \
230
+ "" \
231
+ ""
232
+ sleep 0.04
233
+
234
+ # F14 CRACK
235
+ frame \
236
+ "" \
237
+ "" \
238
+ "" \
239
+ "" \
240
+ "" \
241
+ "" \
242
+ " \\|/" \
243
+ "⠤⣄ ⢀⣠⠤⠔⠒⠒⠒⠒⠒⠒⠒⠦⠤⠤⠤⠤-*-" \
244
+ " ⠈⠓⢤⣀⣀⠤⠤/⠔⠊⠁ /|\\" \
245
+ "" \
246
+ "" \
247
+ ""
248
+ sleep 0.04
249
+
250
+ # F15 SHOCKWAVE
251
+ frame \
252
+ "" \
253
+ "" \
254
+ "" \
255
+ "" \
256
+ "" \
257
+ "" \
258
+ "" \
259
+ "⢤⡀" \
260
+ " ⠳⡀ ⣠/⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄ ',." \
261
+ " ⠹⣄⡤⠋ . ." \
262
+ " ⠉" \
263
+ ""
264
+ sleep 0.04
265
+
266
+ # F16 RECOIL
267
+ frame \
268
+ "" \
269
+ "" \
270
+ "" \
271
+ "" \
272
+ "" \
273
+ "" \
274
+ "" \
275
+ "⣴" \
276
+ "⢻⡆" \
277
+ "⢸⡇ ⣠/⠔⠒⠒⠦⠤⣄⣀" \
278
+ " ⣿⣠⠞⠁ ⠈⠉⠓⠒⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄ . ." \
279
+ " ⠛⠁"
280
+ sleep 0.04
281
+
282
+ # F17 SETTLING
283
+ frame \
284
+ "" \
285
+ "" \
286
+ "" \
287
+ "" \
288
+ "" \
289
+ "" \
290
+ "" \
291
+ "⣦" \
292
+ "⡿" \
293
+ "⡇ ⣠/⢤⡀" \
294
+ "⣧⠞⠁ ⠉⠓⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄" \
295
+ "⠁"
296
+ sleep 0.04
297
+
298
+ # F18 near REST
299
+ frame \
300
+ "" \
301
+ "" \
302
+ "" \
303
+ "" \
304
+ "" \
305
+ "" \
306
+ "" \
307
+ "⡄" \
308
+ "⠃" \
309
+ "⢀⡠/⢤" \
310
+ "⠋ ⠈⠓⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄" \
311
+ ""
312
+ sleep 0.04
313
+
314
+ # F19 REST
315
+ frame \
316
+ "" \
317
+ "" \
318
+ "" \
319
+ "" \
320
+ "" \
321
+ "" \
322
+ "" \
323
+ "⡄" \
324
+ "⠃" \
325
+ "⢀⡠/⢤⡀" \
326
+ "⠋ ⠑⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄" \
327
+ ""
328
+ sleep 0.04
329
+
330
+ # F20 REST — hold
331
+ frame \
332
+ "" \
333
+ "" \
334
+ "" \
335
+ "" \
336
+ "" \
337
+ "" \
338
+ "" \
339
+ "⡄" \
340
+ "⠃" \
341
+ "⢀⡠/⢤⡀" \
342
+ "⠋ ⠑⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄" \
343
+ ""
344
+ sleep 0.04
345
+