@possumtech/rummy 0.5.0 → 2.0.1

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 (157) hide show
  1. package/.env.example +42 -5
  2. package/PLUGINS.md +389 -194
  3. package/README.md +25 -8
  4. package/SPEC.md +934 -373
  5. package/bin/demo.js +166 -0
  6. package/bin/rummy.js +9 -3
  7. package/biome/no-fallbacks.grit +50 -0
  8. package/lang/en.json +2 -2
  9. package/migrations/001_initial_schema.sql +88 -37
  10. package/package.json +13 -11
  11. package/scriptify/ask_run.js +77 -0
  12. package/service.js +50 -9
  13. package/src/agent/AgentLoop.js +476 -335
  14. package/src/agent/ContextAssembler.js +4 -4
  15. package/src/agent/Entries.js +676 -0
  16. package/src/agent/ProjectAgent.js +30 -18
  17. package/src/agent/TurnExecutor.js +232 -421
  18. package/src/agent/XmlParser.js +99 -33
  19. package/src/agent/budget.js +56 -0
  20. package/src/agent/errors.js +22 -0
  21. package/src/agent/httpStatus.js +39 -0
  22. package/src/agent/known_checks.sql +8 -4
  23. package/src/agent/known_queries.sql +9 -13
  24. package/src/agent/known_store.sql +280 -125
  25. package/src/agent/materializeContext.js +104 -0
  26. package/src/agent/runs.sql +29 -7
  27. package/src/agent/schemes.sql +14 -3
  28. package/src/agent/tokens.js +6 -0
  29. package/src/agent/turns.sql +9 -9
  30. package/src/hooks/HookRegistry.js +6 -5
  31. package/src/hooks/Hooks.js +44 -3
  32. package/src/hooks/PluginContext.js +29 -21
  33. package/src/{server → hooks}/RpcRegistry.js +2 -1
  34. package/src/hooks/RummyContext.js +139 -35
  35. package/src/hooks/ToolRegistry.js +21 -16
  36. package/src/llm/LlmProvider.js +66 -89
  37. package/src/llm/errors.js +21 -0
  38. package/src/llm/retry.js +63 -0
  39. package/src/plugins/ask_user/README.md +1 -1
  40. package/src/plugins/ask_user/ask_user.js +37 -12
  41. package/src/plugins/ask_user/ask_userDoc.js +2 -25
  42. package/src/plugins/ask_user/ask_userDoc.md +10 -0
  43. package/src/plugins/budget/README.md +27 -25
  44. package/src/plugins/budget/budget.js +306 -88
  45. package/src/plugins/cp/README.md +2 -2
  46. package/src/plugins/cp/cp.js +29 -11
  47. package/src/plugins/cp/cpDoc.js +2 -15
  48. package/src/plugins/cp/cpDoc.md +7 -0
  49. package/src/plugins/engine/README.md +2 -2
  50. package/src/plugins/engine/engine.sql +4 -4
  51. package/src/plugins/engine/turn_context.sql +10 -10
  52. package/src/plugins/env/README.md +20 -5
  53. package/src/plugins/env/env.js +45 -6
  54. package/src/plugins/env/envDoc.js +2 -23
  55. package/src/plugins/env/envDoc.md +13 -0
  56. package/src/plugins/error/README.md +16 -0
  57. package/src/plugins/error/error.js +151 -0
  58. package/src/plugins/file/README.md +6 -6
  59. package/src/plugins/file/file.js +15 -2
  60. package/src/plugins/get/README.md +1 -1
  61. package/src/plugins/get/get.js +103 -48
  62. package/src/plugins/get/getDoc.js +2 -32
  63. package/src/plugins/get/getDoc.md +36 -0
  64. package/src/plugins/hedberg/README.md +1 -2
  65. package/src/plugins/hedberg/hedberg.js +8 -4
  66. package/src/plugins/hedberg/matcher.js +16 -17
  67. package/src/plugins/hedberg/normalize.js +0 -48
  68. package/src/plugins/helpers.js +42 -2
  69. package/src/plugins/index.js +146 -123
  70. package/src/plugins/instructions/README.md +35 -9
  71. package/src/plugins/instructions/instructions.js +244 -9
  72. package/src/plugins/instructions/instructions.md +33 -0
  73. package/src/plugins/instructions/instructions_104.md +7 -0
  74. package/src/plugins/instructions/instructions_105.md +38 -0
  75. package/src/plugins/instructions/instructions_106.md +21 -0
  76. package/src/plugins/instructions/instructions_107.md +10 -0
  77. package/src/plugins/instructions/instructions_108.md +0 -0
  78. package/src/plugins/instructions/protocol.js +12 -0
  79. package/src/plugins/known/README.md +2 -2
  80. package/src/plugins/known/known.js +68 -36
  81. package/src/plugins/known/knownDoc.js +2 -17
  82. package/src/plugins/known/knownDoc.md +8 -0
  83. package/src/plugins/log/README.md +48 -0
  84. package/src/plugins/log/log.js +129 -0
  85. package/src/plugins/mv/README.md +2 -2
  86. package/src/plugins/mv/mv.js +55 -22
  87. package/src/plugins/mv/mvDoc.js +2 -18
  88. package/src/plugins/mv/mvDoc.md +10 -0
  89. package/src/plugins/ollama/README.md +15 -0
  90. package/src/{llm/OllamaClient.js → plugins/ollama/ollama.js} +40 -18
  91. package/src/plugins/openai/README.md +17 -0
  92. package/src/plugins/openai/openai.js +120 -0
  93. package/src/plugins/openrouter/README.md +27 -0
  94. package/src/plugins/openrouter/openrouter.js +121 -0
  95. package/src/plugins/persona/README.md +20 -0
  96. package/src/plugins/persona/persona.js +9 -16
  97. package/src/plugins/policy/README.md +21 -0
  98. package/src/plugins/policy/policy.js +29 -14
  99. package/src/plugins/prompt/README.md +1 -1
  100. package/src/plugins/prompt/prompt.js +64 -16
  101. package/src/plugins/rm/README.md +1 -1
  102. package/src/plugins/rm/rm.js +56 -12
  103. package/src/plugins/rm/rmDoc.js +2 -20
  104. package/src/plugins/rm/rmDoc.md +13 -0
  105. package/src/plugins/rpc/README.md +2 -2
  106. package/src/plugins/rpc/rpc.js +525 -296
  107. package/src/plugins/set/README.md +1 -1
  108. package/src/plugins/set/set.js +318 -75
  109. package/src/plugins/set/setDoc.js +2 -35
  110. package/src/plugins/set/setDoc.md +22 -0
  111. package/src/plugins/sh/README.md +28 -5
  112. package/src/plugins/sh/sh.js +50 -6
  113. package/src/plugins/sh/shDoc.js +2 -23
  114. package/src/plugins/sh/shDoc.md +13 -0
  115. package/src/plugins/skill/README.md +23 -0
  116. package/src/plugins/skill/skill.js +14 -18
  117. package/src/plugins/stream/README.md +101 -0
  118. package/src/plugins/stream/stream.js +290 -0
  119. package/src/plugins/telemetry/README.md +1 -1
  120. package/src/plugins/telemetry/telemetry.js +129 -80
  121. package/src/plugins/think/README.md +1 -1
  122. package/src/plugins/think/think.js +12 -0
  123. package/src/plugins/think/thinkDoc.js +2 -15
  124. package/src/plugins/think/thinkDoc.md +7 -0
  125. package/src/plugins/unknown/README.md +3 -3
  126. package/src/plugins/unknown/unknown.js +47 -19
  127. package/src/plugins/unknown/unknownDoc.js +2 -21
  128. package/src/plugins/unknown/unknownDoc.md +11 -0
  129. package/src/plugins/update/README.md +1 -1
  130. package/src/plugins/update/update.js +83 -5
  131. package/src/plugins/update/updateDoc.js +2 -30
  132. package/src/plugins/update/updateDoc.md +8 -0
  133. package/src/plugins/xai/README.md +23 -0
  134. package/src/{llm/XaiClient.js → plugins/xai/xai.js} +58 -37
  135. package/src/plugins/yolo/yolo.js +192 -0
  136. package/src/server/ClientConnection.js +64 -37
  137. package/src/server/SocketServer.js +23 -10
  138. package/src/server/protocol.js +11 -0
  139. package/src/sql/v_model_context.sql +27 -31
  140. package/src/sql/v_run_log.sql +9 -14
  141. package/EXCEPTIONS.md +0 -46
  142. package/FIDELITY_CONTRACT.md +0 -172
  143. package/src/agent/KnownStore.js +0 -337
  144. package/src/agent/ResponseHealer.js +0 -241
  145. package/src/llm/OpenAiClient.js +0 -100
  146. package/src/llm/OpenRouterClient.js +0 -100
  147. package/src/plugins/budget/recovery.js +0 -47
  148. package/src/plugins/instructions/preamble.md +0 -45
  149. package/src/plugins/performed/README.md +0 -15
  150. package/src/plugins/performed/performed.js +0 -45
  151. package/src/plugins/previous/README.md +0 -16
  152. package/src/plugins/previous/previous.js +0 -56
  153. package/src/plugins/progress/README.md +0 -16
  154. package/src/plugins/progress/progress.js +0 -43
  155. package/src/plugins/summarize/README.md +0 -19
  156. package/src/plugins/summarize/summarize.js +0 -32
  157. package/src/plugins/summarize/summarizeDoc.js +0 -27
package/.env.example CHANGED
@@ -17,13 +17,17 @@ RUMMY_MMAP_MB=0
17
17
 
18
18
  # Agent Loop Limits
19
19
  RUMMY_MAX_TURNS=99
20
- RUMMY_MAX_COMMANDS=15
21
- RUMMY_MAX_UNKNOWN_WARNINGS=3
20
+ # Hard cap on commands per turn — high by design. The real cost
21
+ # ceiling is the Token Budget; per-tool rate limits (e.g.
22
+ # RUMMY_WEB_SEARCH_MAX) bound the expensive tools individually.
23
+ RUMMY_MAX_COMMANDS=99
24
+ # Per-turn cap on <search>. Refusals strike via 429.
25
+ RUMMY_WEB_SEARCH_MAX=1
22
26
  RUMMY_MAX_STALLS=3
27
+ RUMMY_MAX_STRIKES=3
23
28
  RUMMY_MIN_CYCLES=3
24
29
  RUMMY_MAX_CYCLE_PERIOD=4
25
30
  RUMMY_MAX_UPDATE_REPEATS=3
26
- RUMMY_MAX_PATH_STAGNATION=5
27
31
 
28
32
  # Hygiene
29
33
  # Days to keep completed/aborted runs before purging
@@ -32,6 +36,16 @@ RUMMY_RETENTION_DAYS=31
32
36
  # Timeouts (ms)
33
37
  RUMMY_RPC_TIMEOUT=30000
34
38
  RUMMY_FETCH_TIMEOUT=300000
39
+ # Test harness — how long AuditClient waits for a single ask/act to reach
40
+ # terminal status. Sized for full-context ingest on large-window models.
41
+ RUMMY_TEST_RUN_TIMEOUT=3600000
42
+
43
+ # LLM retry policy: time-bounded exponential backoff with full jitter.
44
+ # DEADLINE is total wall-clock budget for an LLM call across all retries.
45
+ # MAX_BACKOFF caps each inter-attempt sleep so a long deadline doesn't
46
+ # yield 10-minute waits between attempts.
47
+ RUMMY_LLM_DEADLINE_MS=600000
48
+ RUMMY_LLM_MAX_BACKOFF_MS=30000
35
49
 
36
50
  # Debug
37
51
  # RUMMY_DEBUG=true
@@ -55,6 +69,17 @@ RUMMY_TOKEN_DIVISOR=2
55
69
  # LLM temperature (0 = deterministic, 0.7 = creative). Client can override per-request.
56
70
  RUMMY_TEMPERATURE=0.5
57
71
 
72
+ # Run Attribute Defaults
73
+ # Per-run attributes (passed in the run-creation set call) trump these.
74
+ # Strict "1" enables; unset / "0" / "" disables. Useful in profile env
75
+ # files (e.g. .env.tbench) layered via --env-file-if-exists.
76
+ #
77
+ # RUMMY_YOLO=1 # auto-accept every proposal (headless / CI / bench)
78
+ # RUMMY_NO_INTERACTION=1 # exclude <ask_user> from the tool list
79
+ # RUMMY_NO_WEB=1 # exclude <search> from the tool list
80
+ # RUMMY_NO_PROPOSALS=1 # exclude <ask_user>/<env>/<sh>
81
+ # RUMMY_NO_REPO=1 # skip rummy.repo scanning (file scan + overview)
82
+
58
83
  # Provider Configuration
59
84
  OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
60
85
  # OPENROUTER_API_KEY=
@@ -71,15 +96,27 @@ RUMMY_X_TITLE=RUMMY
71
96
  # XAI_API_KEY=""
72
97
 
73
98
  # Model Aliases (Optional)
74
- # RUMMY_MODEL_g420="x.ai/grok-4.20-reasoning-latest"
75
- # RUMMY_MODEL_grok="x.ai/grok-4-1-fast-reasoning-latest"
99
+ # First path segment picks the provider plugin; the rest is the
100
+ # provider's own model identifier. OpenRouter is tri-level because
101
+ # its API expects publisher/model; direct providers are bi-level.
102
+ # RUMMY_MODEL_g420="xai/grok-4.20-reasoning-latest"
103
+ # RUMMY_MODEL_grok="xai/grok-4-1-fast-reasoning-latest"
104
+ # RUMMY_MODEL_opus="openrouter/anthropic/claude-opus-4.6"
105
+ # RUMMY_MODEL_gpro="openrouter/google/gemini-3.1-pro-preview"
106
+ # RUMMY_MODEL_gemma="openai/gemma-4-26B-A4B-it-UD-Q3_K_XL.gguf"
107
+ # RUMMY_MODEL_qwen="ollama/qwen:7b"
76
108
 
77
109
  # Necessary for automated testing
78
110
  # RUMMY_TEST_MODEL=grok
79
111
 
80
112
  # Web Search
113
+
114
+ # RUMMY_SEARCH="searxng"
81
115
  # RUMMY_SEARXNG_URL="http://127.0.0.1:8888"
82
116
 
117
+ # RUMMY_SEARCH="brave"
118
+ # BRAVE_API_KEY=""
119
+
83
120
  # External plugins: npm i -g <package>, then uncomment
84
121
  # RUMMY_PLUGIN_WEB="@possumtech/rummy.web"
85
122
  # RUMMY_PLUGIN_REPO="@possumtech/rummy.repo"