minimal-agent 0.1.9 → 0.3.0

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 (97) hide show
  1. package/README.md +383 -122
  2. package/package.json +19 -12
  3. package/plugins/HOW-TO-WRITE-A-PLUGIN.md +186 -0
  4. package/plugins/ralph-wiggum/commands/ralph-loop.md +6 -16
  5. package/plugins/ralph-wiggum/plugin.js +205 -0
  6. package/plugins/ralph-wiggum/src/goalState.js +260 -0
  7. package/plugins/ralph-wiggum/src/sentinels.js +21 -0
  8. package/plugins/ralph-wiggum/src/stopHookRunner.js +104 -0
  9. package/plugins/ralph-wiggum/src/verificationGate.js +202 -0
  10. package/plugins/workflow-runner/.claude-plugin/plugin.json +5 -0
  11. package/plugins/workflow-runner/commands/workflow.md +15 -0
  12. package/plugins/workflow-runner/commands/workflows.md +8 -0
  13. package/plugins/workflow-runner/plugin.js +36 -0
  14. package/plugins/workflow-runner/src/expressions.js +369 -0
  15. package/plugins/workflow-runner/src/index.js +174 -0
  16. package/plugins/workflow-runner/src/loader.js +183 -0
  17. package/plugins/workflow-runner/src/runner.js +290 -0
  18. package/plugins/workflow-runner/src/stepExecutors/assert.js +28 -0
  19. package/plugins/workflow-runner/src/stepExecutors/llm.js +44 -0
  20. package/plugins/workflow-runner/src/stepExecutors/skill.js +103 -0
  21. package/plugins/workflow-runner/src/stepExecutors/tool.js +35 -0
  22. package/plugins/workflow-runner/src/types.js +59 -0
  23. package/plugins/workflow-runner/src/workflowState.js +46 -0
  24. package/skills/image-gen-openrouter/SKILL.md +121 -0
  25. package/skills/subtitle-srt/SKILL.md +134 -0
  26. package/skills/tts-zh/SKILL.md +137 -0
  27. package/skills/video-compose/SKILL.md +139 -0
  28. package/src/bootstrap/cwdArg.js +22 -0
  29. package/src/bootstrap/workingDir.js +31 -0
  30. package/src/cli/configWizard.js +272 -0
  31. package/src/cli/print.js +192 -0
  32. package/src/config/configFile.js +78 -0
  33. package/src/config.js +118 -0
  34. package/src/context/compact.js +357 -0
  35. package/src/context/microCompactLite.js +151 -0
  36. package/src/context/persistContext.js +109 -0
  37. package/src/context/reactiveCompact.js +121 -0
  38. package/src/context/sessionPath.js +58 -0
  39. package/src/context/snipCompact.js +112 -0
  40. package/src/context/tokenCounter.js +66 -0
  41. package/src/llm/client.js +182 -0
  42. package/src/loop.js +230 -0
  43. package/src/main.js +116 -0
  44. package/src/plugin-sdk.js +24 -0
  45. package/src/plugins/commandRouter.js +169 -0
  46. package/src/plugins/hookEngine.js +258 -0
  47. package/src/plugins/pluginApi.js +23 -0
  48. package/src/plugins/pluginLoader.js +71 -0
  49. package/src/plugins/pluginRunner.js +65 -0
  50. package/src/plugins/transcript.js +171 -0
  51. package/src/prompts/projectInstructions.js +48 -0
  52. package/src/prompts/skillList.js +126 -0
  53. package/src/prompts/system.js +155 -0
  54. package/src/session/runTurn.js +41 -0
  55. package/src/session/sessionState.js +19 -0
  56. package/src/tools/bash/bash.js +352 -0
  57. package/src/tools/bash/semantics.js +85 -0
  58. package/src/tools/bash/warnings.js +98 -0
  59. package/src/tools/edit/edit.js +253 -0
  60. package/src/tools/edit/multi-edit.js +155 -0
  61. package/src/tools/glob/glob.js +97 -0
  62. package/src/tools/grep/grep.js +185 -0
  63. package/src/tools/grep/rgPath.js +173 -0
  64. package/src/tools/index.js +94 -0
  65. package/src/tools/read/read.js +209 -0
  66. package/src/tools/shared/fileState.js +61 -0
  67. package/src/tools/shared/fileUtils.js +281 -0
  68. package/src/tools/shared/schemas.js +16 -0
  69. package/src/tools/types.js +21 -0
  70. package/src/tools/webbrowser/browser.js +55 -0
  71. package/src/tools/webbrowser/webbrowser.js +194 -0
  72. package/src/tools/webfetch/preapproved.js +267 -0
  73. package/src/tools/webfetch/webfetch.js +317 -0
  74. package/src/tools/websearch/websearch.js +161 -0
  75. package/src/tools/write/write.js +125 -0
  76. package/src/types/turndown.d.ts +23 -0
  77. package/src/types.js +16 -0
  78. package/src/ui/App.js +37 -0
  79. package/src/ui/InputBox.js +240 -0
  80. package/src/ui/MessageList.js +28 -0
  81. package/src/ui/Root.js +70 -0
  82. package/src/ui/StatusLine.js +41 -0
  83. package/src/ui/ToolStatus.js +11 -0
  84. package/src/ui/hooks/useChat.js +234 -0
  85. package/src/ui/hooks/usePasteHandler.js +137 -0
  86. package/src/ui/hooks/useTextBuffer.js +55 -0
  87. package/src/ui/hooks/useTokenUsage.js +30 -0
  88. package/src/ui/textBuffer.js +217 -0
  89. package/src/utils/packageRoot.js +37 -0
  90. package/src/utils/resourcePaths.js +49 -0
  91. package/src/utils/zodToJson.js +29 -0
  92. package/workflows/book-review-short.yaml +99 -0
  93. package/workflows/e2e-write-greet.yaml +27 -0
  94. package/workflows/schema.json +74 -0
  95. package/workflows/youtube-shorts.yaml +171 -0
  96. package/dist/main.js +0 -5936
  97. package/plugins/ralph-wiggum/scripts/setup-ralph-loop.sh +0 -203
@@ -1,203 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Ralph Loop Setup Script
4
- # Creates state file for in-session Ralph loop
5
-
6
- set -euo pipefail
7
-
8
- # Parse arguments
9
- PROMPT_PARTS=()
10
- MAX_ITERATIONS=0
11
- COMPLETION_PROMISE="null"
12
-
13
- # Parse options and positional arguments
14
- while [[ $# -gt 0 ]]; do
15
- case $1 in
16
- -h|--help)
17
- cat << 'HELP_EOF'
18
- Ralph Loop - Interactive self-referential development loop
19
-
20
- USAGE:
21
- /ralph-loop [PROMPT...] [OPTIONS]
22
-
23
- ARGUMENTS:
24
- PROMPT... Initial prompt to start the loop (can be multiple words without quotes)
25
-
26
- OPTIONS:
27
- --max-iterations <n> Maximum iterations before auto-stop (default: unlimited)
28
- --completion-promise '<text>' Promise phrase (USE QUOTES for multi-word)
29
- -h, --help Show this help message
30
-
31
- DESCRIPTION:
32
- Starts a Ralph Wiggum loop in your CURRENT session. The stop hook prevents
33
- exit and feeds your output back as input until completion or iteration limit.
34
-
35
- To signal completion, you must output: <promise>YOUR_PHRASE</promise>
36
-
37
- Use this for:
38
- - Interactive iteration where you want to see progress
39
- - Tasks requiring self-correction and refinement
40
- - Learning how Ralph works
41
-
42
- EXAMPLES:
43
- /ralph-loop Build a todo API --completion-promise 'DONE' --max-iterations 20
44
- /ralph-loop --max-iterations 10 Fix the auth bug
45
- /ralph-loop Refactor cache layer (runs forever)
46
- /ralph-loop --completion-promise 'TASK COMPLETE' Create a REST API
47
-
48
- STOPPING:
49
- Only by reaching --max-iterations or detecting --completion-promise
50
- No manual stop - Ralph runs infinitely by default!
51
-
52
- MONITORING:
53
- # View current iteration:
54
- grep '^iteration:' .minimal-agent/ralph-loop.local.md
55
-
56
- # View full state:
57
- head -10 .minimal-agent/ralph-loop.local.md
58
- HELP_EOF
59
- exit 0
60
- ;;
61
- --max-iterations)
62
- if [[ -z "${2:-}" ]]; then
63
- echo "❌ Error: --max-iterations requires a number argument" >&2
64
- echo "" >&2
65
- echo " Valid examples:" >&2
66
- echo " --max-iterations 10" >&2
67
- echo " --max-iterations 50" >&2
68
- echo " --max-iterations 0 (unlimited)" >&2
69
- echo "" >&2
70
- echo " You provided: --max-iterations (with no number)" >&2
71
- exit 1
72
- fi
73
- if ! [[ "$2" =~ ^[0-9]+$ ]]; then
74
- echo "❌ Error: --max-iterations must be a positive integer or 0, got: $2" >&2
75
- echo "" >&2
76
- echo " Valid examples:" >&2
77
- echo " --max-iterations 10" >&2
78
- echo " --max-iterations 50" >&2
79
- echo " --max-iterations 0 (unlimited)" >&2
80
- echo "" >&2
81
- echo " Invalid: decimals (10.5), negative numbers (-5), text" >&2
82
- exit 1
83
- fi
84
- MAX_ITERATIONS="$2"
85
- shift 2
86
- ;;
87
- --completion-promise)
88
- if [[ -z "${2:-}" ]]; then
89
- echo "❌ Error: --completion-promise requires a text argument" >&2
90
- echo "" >&2
91
- echo " Valid examples:" >&2
92
- echo " --completion-promise 'DONE'" >&2
93
- echo " --completion-promise 'TASK COMPLETE'" >&2
94
- echo " --completion-promise 'All tests passing'" >&2
95
- echo "" >&2
96
- echo " You provided: --completion-promise (with no text)" >&2
97
- echo "" >&2
98
- echo " Note: Multi-word promises must be quoted!" >&2
99
- exit 1
100
- fi
101
- COMPLETION_PROMISE="$2"
102
- shift 2
103
- ;;
104
- *)
105
- # Non-option argument - collect all as prompt parts
106
- PROMPT_PARTS+=("$1")
107
- shift
108
- ;;
109
- esac
110
- done
111
-
112
- # Join all prompt parts with spaces
113
- PROMPT="${PROMPT_PARTS[*]}"
114
-
115
- # Validate prompt is non-empty
116
- if [[ -z "$PROMPT" ]]; then
117
- echo "❌ Error: No prompt provided" >&2
118
- echo "" >&2
119
- echo " Ralph needs a task description to work on." >&2
120
- echo "" >&2
121
- echo " Examples:" >&2
122
- echo " /ralph-loop Build a REST API for todos" >&2
123
- echo " /ralph-loop Fix the auth bug --max-iterations 20" >&2
124
- echo " /ralph-loop --completion-promise 'DONE' Refactor code" >&2
125
- echo "" >&2
126
- echo " For all options: /ralph-loop --help" >&2
127
- exit 1
128
- fi
129
-
130
- # Create state file for stop hook (markdown with YAML frontmatter)
131
- mkdir -p .minimal-agent
132
-
133
- # Quote completion promise for YAML if it contains special chars or is not null
134
- if [[ -n "$COMPLETION_PROMISE" ]] && [[ "$COMPLETION_PROMISE" != "null" ]]; then
135
- COMPLETION_PROMISE_YAML="\"$COMPLETION_PROMISE\""
136
- else
137
- COMPLETION_PROMISE_YAML="null"
138
- fi
139
-
140
- cat > .minimal-agent/ralph-loop.local.md <<EOF
141
- ---
142
- active: true
143
- iteration: 1
144
- max_iterations: $MAX_ITERATIONS
145
- completion_promise: $COMPLETION_PROMISE_YAML
146
- started_at: "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
147
- ---
148
-
149
- $PROMPT
150
- EOF
151
-
152
- # Output setup message
153
- cat <<EOF
154
- 🔄 Ralph loop activated in this session!
155
-
156
- Iteration: 1
157
- Max iterations: $(if [[ $MAX_ITERATIONS -gt 0 ]]; then echo $MAX_ITERATIONS; else echo "unlimited"; fi)
158
- Completion promise: $(if [[ "$COMPLETION_PROMISE" != "null" ]]; then echo "${COMPLETION_PROMISE//\"/} (ONLY output when TRUE - do not lie!)"; else echo "none (runs forever)"; fi)
159
-
160
- The stop hook is now active. When you try to exit, the SAME PROMPT will be
161
- fed back to you. You'll see your previous work in files, creating a
162
- self-referential loop where you iteratively improve on the same task.
163
-
164
- To monitor: head -10 .minimal-agent/ralph-loop.local.md
165
-
166
- ⚠️ WARNING: This loop cannot be stopped manually! It will run infinitely
167
- unless you set --max-iterations or --completion-promise.
168
-
169
- 🔄
170
- EOF
171
-
172
- # Output the initial prompt if provided
173
- if [[ -n "$PROMPT" ]]; then
174
- echo ""
175
- echo "$PROMPT"
176
- fi
177
-
178
- # Display completion promise requirements if set
179
- if [[ "$COMPLETION_PROMISE" != "null" ]]; then
180
- echo ""
181
- echo "═══════════════════════════════════════════════════════════"
182
- echo "CRITICAL - Ralph Loop Completion Promise"
183
- echo "═══════════════════════════════════════════════════════════"
184
- echo ""
185
- echo "To complete this loop, output this EXACT text:"
186
- echo " <promise>$COMPLETION_PROMISE</promise>"
187
- echo ""
188
- echo "STRICT REQUIREMENTS (DO NOT VIOLATE):"
189
- echo " ✓ Use <promise> XML tags EXACTLY as shown above"
190
- echo " ✓ The statement MUST be completely and unequivocally TRUE"
191
- echo " ✓ Do NOT output false statements to exit the loop"
192
- echo " ✓ Do NOT lie even if you think you should exit"
193
- echo ""
194
- echo "IMPORTANT - Do not circumvent the loop:"
195
- echo " Even if you believe you're stuck, the task is impossible,"
196
- echo " or you've been running too long - you MUST NOT output a"
197
- echo " false promise statement. The loop is designed to continue"
198
- echo " until the promise is GENUINELY TRUE. Trust the process."
199
- echo ""
200
- echo " If the loop should stop, the promise statement will become"
201
- echo " true naturally. Do not force it by lying."
202
- echo "═══════════════════════════════════════════════════════════"
203
- fi