sisyphi 1.1.17 → 1.1.19

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 (237) hide show
  1. package/README.md +347 -25
  2. package/dist/chunk-36VJ7ZBD.js +1898 -0
  3. package/dist/chunk-36VJ7ZBD.js.map +1 -0
  4. package/dist/chunk-M6Z3KHOH.js +1165 -0
  5. package/dist/chunk-M6Z3KHOH.js.map +1 -0
  6. package/dist/chunk-O4ZHSQ5R.js +544 -0
  7. package/dist/chunk-O4ZHSQ5R.js.map +1 -0
  8. package/dist/chunk-P2HHTIPM.js +478 -0
  9. package/dist/chunk-P2HHTIPM.js.map +1 -0
  10. package/dist/{chunk-GSXF3TCZ.js → chunk-PNDCVKBN.js} +91 -3
  11. package/dist/chunk-PNDCVKBN.js.map +1 -0
  12. package/dist/chunk-SVGIQ2G4.js +1076 -0
  13. package/dist/chunk-SVGIQ2G4.js.map +1 -0
  14. package/dist/cli.js +4426 -818
  15. package/dist/cli.js.map +1 -1
  16. package/dist/daemon.js +4351 -857
  17. package/dist/daemon.js.map +1 -1
  18. package/dist/paths-JXFLR5BN.js +102 -0
  19. package/dist/single-ask-6G4BIVY2.js +132 -0
  20. package/dist/single-ask-6G4BIVY2.js.map +1 -0
  21. package/dist/templates/CLAUDE.md +1 -56
  22. package/dist/templates/agent-plugin/agents/CLAUDE.md +2 -65
  23. package/dist/templates/agent-plugin/agents/debug.md +43 -6
  24. package/dist/templates/agent-plugin/agents/debug.settings.json +57 -0
  25. package/dist/templates/agent-plugin/agents/explore.md +28 -1
  26. package/dist/templates/agent-plugin/agents/explore.settings.json +57 -0
  27. package/dist/templates/agent-plugin/agents/implementor.md +94 -0
  28. package/dist/templates/agent-plugin/agents/implementor.settings.json +57 -0
  29. package/dist/templates/agent-plugin/agents/operator.md +43 -1
  30. package/dist/templates/agent-plugin/agents/operator.settings.json +57 -0
  31. package/dist/templates/agent-plugin/agents/plan/sub-planner.md +75 -0
  32. package/dist/templates/agent-plugin/agents/plan.md +176 -86
  33. package/dist/templates/agent-plugin/agents/plan.settings.json +57 -0
  34. package/dist/templates/agent-plugin/agents/problem/adversarial.md +26 -0
  35. package/dist/templates/agent-plugin/agents/problem/contrarian.md +26 -0
  36. package/dist/templates/agent-plugin/agents/problem/first-principles.md +26 -0
  37. package/dist/templates/agent-plugin/agents/problem/precedent.md +25 -0
  38. package/dist/templates/agent-plugin/agents/problem/simplifier.md +26 -0
  39. package/dist/templates/agent-plugin/agents/problem/systems-thinker.md +26 -0
  40. package/dist/templates/agent-plugin/agents/problem/time-traveler.md +26 -0
  41. package/dist/templates/agent-plugin/agents/problem/user-empathy.md +26 -0
  42. package/dist/templates/agent-plugin/agents/problem.md +334 -79
  43. package/dist/templates/agent-plugin/agents/problem.settings.json +57 -0
  44. package/dist/templates/agent-plugin/agents/research-lead/CLAUDE.md +26 -0
  45. package/dist/templates/agent-plugin/agents/research-lead/critic.md +61 -0
  46. package/dist/templates/agent-plugin/agents/research-lead/researcher.md +60 -0
  47. package/dist/templates/agent-plugin/agents/research-lead.md +184 -0
  48. package/dist/templates/agent-plugin/agents/research-lead.settings.json +57 -0
  49. package/dist/templates/agent-plugin/agents/review/CLAUDE.md +3 -29
  50. package/dist/templates/agent-plugin/agents/review/compliance.md +14 -3
  51. package/dist/templates/agent-plugin/agents/review/efficiency.md +15 -4
  52. package/dist/templates/agent-plugin/agents/review/quality.md +20 -6
  53. package/dist/templates/agent-plugin/agents/review/reuse.md +17 -5
  54. package/dist/templates/agent-plugin/agents/review/security.md +10 -3
  55. package/dist/templates/agent-plugin/agents/review/tests.md +58 -0
  56. package/dist/templates/agent-plugin/agents/review-plan/CLAUDE.md +28 -0
  57. package/dist/templates/agent-plugin/agents/review-plan/code-smells.md +4 -2
  58. package/dist/templates/agent-plugin/agents/review-plan/pattern-consistency.md +4 -2
  59. package/dist/templates/agent-plugin/agents/review-plan/requirements-coverage.md +3 -1
  60. package/dist/templates/agent-plugin/agents/review-plan/security.md +5 -2
  61. package/dist/templates/agent-plugin/agents/review-plan.md +52 -5
  62. package/dist/templates/agent-plugin/agents/review-plan.settings.json +57 -0
  63. package/dist/templates/agent-plugin/agents/review.md +89 -16
  64. package/dist/templates/agent-plugin/agents/review.settings.json +57 -0
  65. package/dist/templates/agent-plugin/agents/spec/engineer.md +175 -0
  66. package/dist/templates/agent-plugin/agents/spec/requirements-writer.md +149 -0
  67. package/dist/templates/agent-plugin/agents/spec.md +444 -0
  68. package/dist/templates/agent-plugin/agents/spec.settings.json +57 -0
  69. package/dist/templates/agent-plugin/agents/test-spec.md +58 -2
  70. package/dist/templates/agent-plugin/agents/test-spec.settings.json +57 -0
  71. package/dist/templates/agent-plugin/hooks/CLAUDE.md +9 -57
  72. package/dist/templates/agent-plugin/hooks/ask-background-guard.sh +57 -0
  73. package/dist/templates/agent-plugin/hooks/intercept-send-message.sh +1 -1
  74. package/dist/templates/agent-plugin/hooks/plan-user-prompt.sh +8 -7
  75. package/dist/templates/agent-plugin/hooks/plan-validate.sh +97 -0
  76. package/dist/templates/agent-plugin/hooks/plan-write-path.sh +55 -0
  77. package/dist/templates/agent-plugin/hooks/problem-user-prompt.sh +26 -0
  78. package/dist/templates/agent-plugin/hooks/register-bg-task.sh +37 -0
  79. package/dist/templates/agent-plugin/hooks/require-submit.sh +51 -42
  80. package/dist/templates/agent-plugin/hooks/review-user-prompt.sh +6 -2
  81. package/dist/templates/agent-plugin/hooks/spec-user-prompt.sh +43 -0
  82. package/dist/templates/agent-plugin/skills/humanloop/SKILL.md +147 -0
  83. package/dist/templates/agent-plugin/skills/perspective-fanout/SKILL.md +115 -0
  84. package/dist/templates/agent-plugin/skills/problem-document/SKILL.md +105 -0
  85. package/dist/templates/agent-plugin/skills/problem-plateau-breakers/SKILL.md +83 -0
  86. package/dist/templates/agent-suffix.md +7 -4
  87. package/dist/templates/baleia.lua +42 -0
  88. package/dist/templates/companion-plugin/hooks/user-prompt-context.sh +1 -1
  89. package/dist/templates/dashboard-claude.md +7 -3
  90. package/dist/templates/orchestrator-base.md +89 -52
  91. package/dist/templates/orchestrator-completion.md +47 -24
  92. package/dist/templates/orchestrator-discovery.md +183 -0
  93. package/dist/templates/orchestrator-impl.md +47 -18
  94. package/dist/templates/orchestrator-planning.md +109 -20
  95. package/dist/templates/orchestrator-plugin/commands/sisyphus/scratch.md +19 -0
  96. package/dist/templates/orchestrator-plugin/commands/sisyphus/spec.md +11 -0
  97. package/dist/templates/orchestrator-plugin/commands/sisyphus/strategize.md +5 -5
  98. package/dist/templates/orchestrator-plugin/hooks/hooks.json +0 -10
  99. package/dist/templates/orchestrator-plugin/skills/humanloop/SKILL.md +149 -0
  100. package/dist/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -0
  101. package/dist/templates/orchestrator-plugin/skills/orchestration/SKILL.md +2 -1
  102. package/dist/templates/orchestrator-plugin/skills/orchestration/strategy.md +160 -0
  103. package/dist/templates/orchestrator-plugin/skills/orchestration/task-patterns.md +26 -28
  104. package/dist/templates/orchestrator-plugin/skills/orchestration/workflow-examples.md +133 -25
  105. package/dist/templates/orchestrator-settings.json +55 -0
  106. package/dist/templates/orchestrator-validation.md +17 -14
  107. package/dist/templates/sisyphus-init.lua +30 -0
  108. package/dist/templates/sisyphus-tmux-plugin/hooks/hooks.json +54 -0
  109. package/dist/templates/sisyphus-tmux-plugin/hooks/tmux-state.sh +19 -0
  110. package/dist/templates/termrender-haiku-system.md +82 -0
  111. package/dist/templates/whip-animation.sh +345 -0
  112. package/dist/tui.js +3789 -2406
  113. package/dist/tui.js.map +1 -1
  114. package/native/SisyphusNotify/AppIcon.icns +0 -0
  115. package/native/SisyphusNotify/Info.plist +26 -0
  116. package/native/SisyphusNotify/main.swift +136 -0
  117. package/native/SisyphusNotify/sisyphus-icon.jpg +0 -0
  118. package/native/build-notify.sh +58 -0
  119. package/package.json +9 -6
  120. package/templates/CLAUDE.md +1 -56
  121. package/templates/agent-plugin/agents/CLAUDE.md +2 -65
  122. package/templates/agent-plugin/agents/debug.md +43 -6
  123. package/templates/agent-plugin/agents/debug.settings.json +57 -0
  124. package/templates/agent-plugin/agents/explore.md +28 -1
  125. package/templates/agent-plugin/agents/explore.settings.json +57 -0
  126. package/templates/agent-plugin/agents/implementor.md +94 -0
  127. package/templates/agent-plugin/agents/implementor.settings.json +57 -0
  128. package/templates/agent-plugin/agents/operator.md +43 -1
  129. package/templates/agent-plugin/agents/operator.settings.json +57 -0
  130. package/templates/agent-plugin/agents/plan/sub-planner.md +75 -0
  131. package/templates/agent-plugin/agents/plan.md +176 -86
  132. package/templates/agent-plugin/agents/plan.settings.json +57 -0
  133. package/templates/agent-plugin/agents/problem/adversarial.md +26 -0
  134. package/templates/agent-plugin/agents/problem/contrarian.md +26 -0
  135. package/templates/agent-plugin/agents/problem/first-principles.md +26 -0
  136. package/templates/agent-plugin/agents/problem/precedent.md +25 -0
  137. package/templates/agent-plugin/agents/problem/simplifier.md +26 -0
  138. package/templates/agent-plugin/agents/problem/systems-thinker.md +26 -0
  139. package/templates/agent-plugin/agents/problem/time-traveler.md +26 -0
  140. package/templates/agent-plugin/agents/problem/user-empathy.md +26 -0
  141. package/templates/agent-plugin/agents/problem.md +334 -79
  142. package/templates/agent-plugin/agents/problem.settings.json +57 -0
  143. package/templates/agent-plugin/agents/research-lead/CLAUDE.md +26 -0
  144. package/templates/agent-plugin/agents/research-lead/critic.md +61 -0
  145. package/templates/agent-plugin/agents/research-lead/researcher.md +60 -0
  146. package/templates/agent-plugin/agents/research-lead.md +184 -0
  147. package/templates/agent-plugin/agents/research-lead.settings.json +57 -0
  148. package/templates/agent-plugin/agents/review/CLAUDE.md +3 -29
  149. package/templates/agent-plugin/agents/review/compliance.md +14 -3
  150. package/templates/agent-plugin/agents/review/efficiency.md +15 -4
  151. package/templates/agent-plugin/agents/review/quality.md +20 -6
  152. package/templates/agent-plugin/agents/review/reuse.md +17 -5
  153. package/templates/agent-plugin/agents/review/security.md +10 -3
  154. package/templates/agent-plugin/agents/review/tests.md +58 -0
  155. package/templates/agent-plugin/agents/review-plan/CLAUDE.md +28 -0
  156. package/templates/agent-plugin/agents/review-plan/code-smells.md +4 -2
  157. package/templates/agent-plugin/agents/review-plan/pattern-consistency.md +4 -2
  158. package/templates/agent-plugin/agents/review-plan/requirements-coverage.md +3 -1
  159. package/templates/agent-plugin/agents/review-plan/security.md +5 -2
  160. package/templates/agent-plugin/agents/review-plan.md +52 -5
  161. package/templates/agent-plugin/agents/review-plan.settings.json +57 -0
  162. package/templates/agent-plugin/agents/review.md +89 -16
  163. package/templates/agent-plugin/agents/review.settings.json +57 -0
  164. package/templates/agent-plugin/agents/spec/engineer.md +175 -0
  165. package/templates/agent-plugin/agents/spec/requirements-writer.md +149 -0
  166. package/templates/agent-plugin/agents/spec.md +444 -0
  167. package/templates/agent-plugin/agents/spec.settings.json +57 -0
  168. package/templates/agent-plugin/agents/test-spec.md +58 -2
  169. package/templates/agent-plugin/agents/test-spec.settings.json +57 -0
  170. package/templates/agent-plugin/hooks/CLAUDE.md +9 -57
  171. package/templates/agent-plugin/hooks/ask-background-guard.sh +57 -0
  172. package/templates/agent-plugin/hooks/intercept-send-message.sh +1 -1
  173. package/templates/agent-plugin/hooks/plan-user-prompt.sh +8 -7
  174. package/templates/agent-plugin/hooks/plan-validate.sh +97 -0
  175. package/templates/agent-plugin/hooks/plan-write-path.sh +55 -0
  176. package/templates/agent-plugin/hooks/problem-user-prompt.sh +26 -0
  177. package/templates/agent-plugin/hooks/register-bg-task.sh +37 -0
  178. package/templates/agent-plugin/hooks/require-submit.sh +51 -42
  179. package/templates/agent-plugin/hooks/review-user-prompt.sh +6 -2
  180. package/templates/agent-plugin/hooks/spec-user-prompt.sh +43 -0
  181. package/templates/agent-plugin/skills/humanloop/SKILL.md +147 -0
  182. package/templates/agent-plugin/skills/perspective-fanout/SKILL.md +115 -0
  183. package/templates/agent-plugin/skills/problem-document/SKILL.md +105 -0
  184. package/templates/agent-plugin/skills/problem-plateau-breakers/SKILL.md +83 -0
  185. package/templates/agent-suffix.md +7 -4
  186. package/templates/baleia.lua +42 -0
  187. package/templates/companion-plugin/hooks/user-prompt-context.sh +1 -1
  188. package/templates/dashboard-claude.md +7 -3
  189. package/templates/orchestrator-base.md +89 -52
  190. package/templates/orchestrator-completion.md +47 -24
  191. package/templates/orchestrator-discovery.md +183 -0
  192. package/templates/orchestrator-impl.md +47 -18
  193. package/templates/orchestrator-planning.md +109 -20
  194. package/templates/orchestrator-plugin/commands/sisyphus/scratch.md +19 -0
  195. package/templates/orchestrator-plugin/commands/sisyphus/spec.md +11 -0
  196. package/templates/orchestrator-plugin/commands/sisyphus/strategize.md +5 -5
  197. package/templates/orchestrator-plugin/hooks/hooks.json +0 -10
  198. package/templates/orchestrator-plugin/skills/humanloop/SKILL.md +149 -0
  199. package/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -0
  200. package/templates/orchestrator-plugin/skills/orchestration/SKILL.md +2 -1
  201. package/templates/orchestrator-plugin/skills/orchestration/strategy.md +160 -0
  202. package/templates/orchestrator-plugin/skills/orchestration/task-patterns.md +26 -28
  203. package/templates/orchestrator-plugin/skills/orchestration/workflow-examples.md +133 -25
  204. package/templates/orchestrator-settings.json +55 -0
  205. package/templates/orchestrator-validation.md +17 -14
  206. package/templates/sisyphus-init.lua +30 -0
  207. package/templates/sisyphus-tmux-plugin/hooks/hooks.json +54 -0
  208. package/templates/sisyphus-tmux-plugin/hooks/tmux-state.sh +19 -0
  209. package/templates/termrender-haiku-system.md +82 -0
  210. package/templates/whip-animation.sh +345 -0
  211. package/dist/chunk-6TIO23U3.js +0 -67
  212. package/dist/chunk-6TIO23U3.js.map +0 -1
  213. package/dist/chunk-GSXF3TCZ.js.map +0 -1
  214. package/dist/chunk-HQZOAX6D.js +0 -240
  215. package/dist/chunk-HQZOAX6D.js.map +0 -1
  216. package/dist/chunk-IF55HPWX.js +0 -44
  217. package/dist/chunk-IF55HPWX.js.map +0 -1
  218. package/dist/chunk-UIVQXCWB.js +0 -46
  219. package/dist/chunk-UIVQXCWB.js.map +0 -1
  220. package/dist/paths-3EL2SCHI.js +0 -58
  221. package/dist/templates/agent-plugin/agents/design.md +0 -134
  222. package/dist/templates/agent-plugin/agents/requirements.md +0 -138
  223. package/dist/templates/begin.md +0 -22
  224. package/dist/templates/nvim-tutorial.txt +0 -68
  225. package/dist/templates/orchestrator-plugin/commands/sisyphus/design.md +0 -13
  226. package/dist/templates/orchestrator-plugin/commands/sisyphus/requirements.md +0 -13
  227. package/dist/templates/orchestrator-plugin/hooks/idle-notify.sh +0 -71
  228. package/dist/templates/orchestrator-strategy.md +0 -238
  229. package/templates/agent-plugin/agents/design.md +0 -134
  230. package/templates/agent-plugin/agents/requirements.md +0 -138
  231. package/templates/begin.md +0 -22
  232. package/templates/nvim-tutorial.txt +0 -68
  233. package/templates/orchestrator-plugin/commands/sisyphus/design.md +0 -13
  234. package/templates/orchestrator-plugin/commands/sisyphus/requirements.md +0 -13
  235. package/templates/orchestrator-plugin/hooks/idle-notify.sh +0 -71
  236. package/templates/orchestrator-strategy.md +0 -238
  237. /package/dist/{paths-3EL2SCHI.js.map → paths-JXFLR5BN.js.map} +0 -0
@@ -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
+
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/shared/env.ts
4
- import { resolve } from "path";
5
- function augmentedPath() {
6
- const rawPath = process.env["PATH"];
7
- const basePath = rawPath !== void 0 && rawPath.length > 0 ? rawPath : "/usr/bin:/bin";
8
- const home = process.env["HOME"];
9
- const candidates = [
10
- ...home ? [`${home}/.local/bin`] : [],
11
- // Claude CLI, pipx, user-local installs
12
- resolve(process.execPath, ".."),
13
- // Node.js bin dir (ensures node/npm available)
14
- "/opt/homebrew/bin",
15
- // Homebrew (Apple Silicon macOS)
16
- "/opt/homebrew/sbin",
17
- // Homebrew sbin
18
- "/usr/local/bin",
19
- // Homebrew (Intel macOS), manual installs
20
- "/usr/local/sbin",
21
- // Manual installs
22
- "/opt/local/bin",
23
- // MacPorts
24
- "/opt/local/sbin",
25
- // MacPorts
26
- "/home/linuxbrew/.linuxbrew/bin"
27
- // Linuxbrew
28
- ];
29
- const nixProfile = process.env["NIX_PROFILES"];
30
- if (nixProfile) {
31
- for (const p of nixProfile.split(" ").reverse()) {
32
- candidates.push(`${p}/bin`);
33
- }
34
- }
35
- const existing = new Set(basePath.split(":"));
36
- const prepend = candidates.filter((dir) => !existing.has(dir));
37
- return prepend.length > 0 ? `${prepend.join(":")}:${basePath}` : basePath;
38
- }
39
- function execEnv() {
40
- return {
41
- ...process.env,
42
- PATH: augmentedPath()
43
- };
44
- }
45
-
46
- // src/shared/exec.ts
47
- import { execSync } from "child_process";
48
- var EXEC_ENV = execEnv();
49
- function exec(cmd, cwd) {
50
- return execSync(cmd, { encoding: "utf-8", env: EXEC_ENV, cwd }).trim();
51
- }
52
- function execSafe(cmd, cwd) {
53
- try {
54
- return execSync(cmd, { encoding: "utf-8", env: EXEC_ENV, cwd, stdio: ["pipe", "pipe", "pipe"] }).trim();
55
- } catch {
56
- return null;
57
- }
58
- }
59
-
60
- export {
61
- augmentedPath,
62
- execEnv,
63
- EXEC_ENV,
64
- exec,
65
- execSafe
66
- };
67
- //# sourceMappingURL=chunk-6TIO23U3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shared/env.ts","../src/shared/exec.ts"],"sourcesContent":["import { resolve } from 'node:path';\n\n/**\n * Build a PATH string that includes common binary directories\n * across package managers and platforms.\n *\n * Prepends known directories that exist on the system to the current PATH.\n * This ensures tmux commands can find binaries installed by Homebrew,\n * MacPorts, nix, and other package managers.\n */\nexport function augmentedPath(): string {\n const rawPath = process.env['PATH'];\n const basePath = rawPath !== undefined && rawPath.length > 0 ? rawPath : '/usr/bin:/bin';\n\n // Common binary directories across platforms/package managers.\n // Only prepend ones that aren't already in PATH.\n const home = process.env['HOME'];\n const candidates = [\n ...(home ? [`${home}/.local/bin`] : []), // Claude CLI, pipx, user-local installs\n resolve(process.execPath, '..'), // Node.js bin dir (ensures node/npm available)\n '/opt/homebrew/bin', // Homebrew (Apple Silicon macOS)\n '/opt/homebrew/sbin', // Homebrew sbin\n '/usr/local/bin', // Homebrew (Intel macOS), manual installs\n '/usr/local/sbin', // Manual installs\n '/opt/local/bin', // MacPorts\n '/opt/local/sbin', // MacPorts\n '/home/linuxbrew/.linuxbrew/bin', // Linuxbrew\n ];\n\n // Check for nix profile paths\n const nixProfile = process.env['NIX_PROFILES'];\n if (nixProfile) {\n for (const p of nixProfile.split(' ').reverse()) {\n candidates.push(`${p}/bin`);\n }\n }\n\n const existing = new Set(basePath.split(':'));\n const prepend = candidates.filter(dir => !existing.has(dir));\n\n return prepend.length > 0 ? `${prepend.join(':')}:${basePath}` : basePath;\n}\n\n/**\n * Environment variables for child processes that need access to\n * user-installed binaries (tmux, git, claude, etc.).\n */\nexport function execEnv(): Record<string, string | undefined> {\n return {\n ...process.env,\n PATH: augmentedPath(),\n };\n}\n","import { execSync } from 'node:child_process';\nimport { execEnv } from './env.js';\n\nexport const EXEC_ENV = execEnv();\n\nexport function exec(cmd: string, cwd?: string): string {\n return execSync(cmd, { encoding: 'utf-8', env: EXEC_ENV, cwd }).trim();\n}\n\nexport function execSafe(cmd: string, cwd?: string): string | null {\n try {\n return execSync(cmd, { encoding: 'utf-8', env: EXEC_ENV, cwd, stdio: ['pipe', 'pipe', 'pipe'] }).trim();\n } catch { return null; }\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AAUjB,SAAS,gBAAwB;AACtC,QAAM,UAAU,QAAQ,IAAI,MAAM;AAClC,QAAM,WAAW,YAAY,UAAa,QAAQ,SAAS,IAAI,UAAU;AAIzE,QAAM,OAAO,QAAQ,IAAI,MAAM;AAC/B,QAAM,aAAa;AAAA,IACjB,GAAI,OAAO,CAAC,GAAG,IAAI,aAAa,IAAI,CAAC;AAAA;AAAA,IACrC,QAAQ,QAAQ,UAAU,IAAI;AAAA;AAAA,IAC9B;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF;AAGA,QAAM,aAAa,QAAQ,IAAI,cAAc;AAC7C,MAAI,YAAY;AACd,eAAW,KAAK,WAAW,MAAM,GAAG,EAAE,QAAQ,GAAG;AAC/C,iBAAW,KAAK,GAAG,CAAC,MAAM;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,IAAI,SAAS,MAAM,GAAG,CAAC;AAC5C,QAAM,UAAU,WAAW,OAAO,SAAO,CAAC,SAAS,IAAI,GAAG,CAAC;AAE3D,SAAO,QAAQ,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,IAAI,QAAQ,KAAK;AACnE;AAMO,SAAS,UAA8C;AAC5D,SAAO;AAAA,IACL,GAAG,QAAQ;AAAA,IACX,MAAM,cAAc;AAAA,EACtB;AACF;;;ACpDA,SAAS,gBAAgB;AAGlB,IAAM,WAAW,QAAQ;AAEzB,SAAS,KAAK,KAAa,KAAsB;AACtD,SAAO,SAAS,KAAK,EAAE,UAAU,SAAS,KAAK,UAAU,IAAI,CAAC,EAAE,KAAK;AACvE;AAEO,SAAS,SAAS,KAAa,KAA6B;AACjE,MAAI;AACF,WAAO,SAAS,KAAK,EAAE,UAAU,SAAS,KAAK,UAAU,KAAK,OAAO,CAAC,QAAQ,QAAQ,MAAM,EAAE,CAAC,EAAE,KAAK;AAAA,EACxG,QAAQ;AAAE,WAAO;AAAA,EAAM;AACzB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shared/paths.ts"],"sourcesContent":["import { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nexport function globalDir(): string {\n return join(homedir(), '.sisyphus');\n}\n\nexport function socketPath(): string {\n return join(globalDir(), 'daemon.sock');\n}\n\nexport function globalConfigPath(): string {\n return join(globalDir(), 'config.json');\n}\n\nexport function daemonLogPath(): string {\n return join(globalDir(), 'daemon.log');\n}\n\nexport function daemonPidPath(): string {\n return join(globalDir(), 'daemon.pid');\n}\n\nexport function daemonUpdatingPath(): string {\n return join(globalDir(), 'updating');\n}\n\nexport function projectDir(cwd: string): string {\n return join(cwd, '.sisyphus');\n}\n\nexport function projectConfigPath(cwd: string): string {\n return join(projectDir(cwd), 'config.json');\n}\n\nexport function projectOrchestratorPromptPath(cwd: string): string {\n return join(projectDir(cwd), 'orchestrator.md');\n}\n\nexport function sessionsDir(cwd: string): string {\n return join(projectDir(cwd), 'sessions');\n}\n\nexport function sessionDir(cwd: string, sessionId: string): string {\n return join(sessionsDir(cwd), sessionId);\n}\n\nexport function statePath(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'state.json');\n}\n\nexport function reportsDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'reports');\n}\n\nexport function reportFilePath(cwd: string, sessionId: string, agentId: string, suffix: string): string {\n return join(reportsDir(cwd, sessionId), `${agentId}-${suffix}.md`);\n}\n\nexport function messagesDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'messages');\n}\n\nexport function promptsDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'prompts');\n}\n\nexport function contextDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'context');\n}\n\nexport function roadmapPath(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'roadmap.md');\n}\n\nexport function goalPath(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'goal.md');\n}\n\nexport function strategyPath(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'strategy.md');\n}\n\nexport function logsDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'logs');\n}\n\nexport function cycleLogPath(cwd: string, sessionId: string, cycle: number): string {\n return join(logsDir(cwd, sessionId), `cycle-${String(cycle).padStart(3, '0')}.md`);\n}\n\n// Backwards compat for old sessions\nexport function legacyLogsPath(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'logs.md');\n}\n\nexport function snapshotsDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), 'snapshots');\n}\n\nexport function snapshotDir(cwd: string, sessionId: string, cycle: number): string {\n return join(snapshotsDir(cwd, sessionId), `cycle-${cycle}`);\n}\n\nexport function tuiScratchDir(cwd: string, sessionId: string): string {\n return join(sessionDir(cwd, sessionId), '.tui');\n}\n\n"],"mappings":";;;AAAA,SAAS,eAAe;AACxB,SAAS,YAAY;AAEd,SAAS,YAAoB;AAClC,SAAO,KAAK,QAAQ,GAAG,WAAW;AACpC;AAEO,SAAS,aAAqB;AACnC,SAAO,KAAK,UAAU,GAAG,aAAa;AACxC;AAEO,SAAS,mBAA2B;AACzC,SAAO,KAAK,UAAU,GAAG,aAAa;AACxC;AAEO,SAAS,gBAAwB;AACtC,SAAO,KAAK,UAAU,GAAG,YAAY;AACvC;AAEO,SAAS,gBAAwB;AACtC,SAAO,KAAK,UAAU,GAAG,YAAY;AACvC;AAEO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,UAAU,GAAG,UAAU;AACrC;AAEO,SAAS,WAAW,KAAqB;AAC9C,SAAO,KAAK,KAAK,WAAW;AAC9B;AAEO,SAAS,kBAAkB,KAAqB;AACrD,SAAO,KAAK,WAAW,GAAG,GAAG,aAAa;AAC5C;AAEO,SAAS,8BAA8B,KAAqB;AACjE,SAAO,KAAK,WAAW,GAAG,GAAG,iBAAiB;AAChD;AAEO,SAAS,YAAY,KAAqB;AAC/C,SAAO,KAAK,WAAW,GAAG,GAAG,UAAU;AACzC;AAEO,SAAS,WAAW,KAAa,WAA2B;AACjE,SAAO,KAAK,YAAY,GAAG,GAAG,SAAS;AACzC;AAEO,SAAS,UAAU,KAAa,WAA2B;AAChE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,YAAY;AACtD;AAEO,SAAS,WAAW,KAAa,WAA2B;AACjE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AACnD;AAEO,SAAS,eAAe,KAAa,WAAmB,SAAiB,QAAwB;AACtG,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,GAAG,OAAO,IAAI,MAAM,KAAK;AACnE;AAEO,SAAS,YAAY,KAAa,WAA2B;AAClE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,UAAU;AACpD;AAEO,SAAS,WAAW,KAAa,WAA2B;AACjE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AACnD;AAEO,SAAS,WAAW,KAAa,WAA2B;AACjE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AACnD;AAEO,SAAS,YAAY,KAAa,WAA2B;AAClE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,YAAY;AACtD;AAEO,SAAS,SAAS,KAAa,WAA2B;AAC/D,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AACnD;AAEO,SAAS,aAAa,KAAa,WAA2B;AACnE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,aAAa;AACvD;AAEO,SAAS,QAAQ,KAAa,WAA2B;AAC9D,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,MAAM;AAChD;AAEO,SAAS,aAAa,KAAa,WAAmB,OAAuB;AAClF,SAAO,KAAK,QAAQ,KAAK,SAAS,GAAG,SAAS,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,KAAK;AACnF;AAGO,SAAS,eAAe,KAAa,WAA2B;AACrE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AACnD;AAEO,SAAS,aAAa,KAAa,WAA2B;AACnE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,WAAW;AACrD;AAEO,SAAS,YAAY,KAAa,WAAmB,OAAuB;AACjF,SAAO,KAAK,aAAa,KAAK,SAAS,GAAG,SAAS,KAAK,EAAE;AAC5D;AAEO,SAAS,cAAc,KAAa,WAA2B;AACpE,SAAO,KAAK,WAAW,KAAK,SAAS,GAAG,MAAM;AAChD;","names":[]}