@possumtech/rummy 2.2.1 → 2.3.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 (50) hide show
  1. package/package.json +14 -6
  2. package/service.js +18 -10
  3. package/src/agent/AgentLoop.js +2 -11
  4. package/src/agent/ContextAssembler.js +34 -3
  5. package/src/agent/Entries.js +16 -89
  6. package/src/agent/ProjectAgent.js +1 -16
  7. package/src/agent/TurnExecutor.js +12 -52
  8. package/src/agent/XmlParser.js +30 -117
  9. package/src/agent/errors.js +3 -22
  10. package/src/agent/materializeContext.js +3 -11
  11. package/src/hooks/Hooks.js +0 -29
  12. package/src/lib/hedberg/hedberg.js +4 -14
  13. package/src/lib/hedberg/marker.js +15 -59
  14. package/src/llm/LlmProvider.js +13 -26
  15. package/src/llm/errors.js +3 -11
  16. package/src/llm/openaiStream.js +6 -46
  17. package/src/plugins/ask_user/ask_user.js +12 -17
  18. package/src/plugins/budget/README.md +46 -8
  19. package/src/plugins/budget/budget.js +23 -42
  20. package/src/plugins/cp/cp.js +28 -18
  21. package/src/plugins/env/env.js +11 -7
  22. package/src/plugins/error/error.js +8 -37
  23. package/src/plugins/get/get.js +42 -24
  24. package/src/plugins/google/google.js +23 -3
  25. package/src/plugins/helpers.js +34 -50
  26. package/src/plugins/instructions/README.md +2 -2
  27. package/src/plugins/instructions/instructions-user.md +1 -1
  28. package/src/plugins/instructions/instructions.js +19 -6
  29. package/src/plugins/known/known.js +1 -8
  30. package/src/plugins/log/log.js +15 -1
  31. package/src/plugins/mv/mv.js +29 -19
  32. package/src/plugins/persona/persona.js +4 -4
  33. package/src/plugins/prompt/README.md +1 -1
  34. package/src/plugins/prompt/prompt.js +1 -1
  35. package/src/plugins/rm/rm.js +26 -15
  36. package/src/plugins/rm/rmDoc.md +0 -2
  37. package/src/plugins/set/set.js +37 -84
  38. package/src/plugins/set/setDoc.md +16 -16
  39. package/src/plugins/sh/sh.js +10 -8
  40. package/src/plugins/skill/skillDoc.md +1 -1
  41. package/src/plugins/unknown/README.md +1 -1
  42. package/src/plugins/unknown/unknown.js +2 -6
  43. package/src/plugins/update/update.js +3 -2
  44. package/src/plugins/update/updateDoc.md +1 -1
  45. package/.env.example +0 -152
  46. package/.xai.key +0 -1
  47. package/PLUGINS.md +0 -962
  48. package/SPEC.md +0 -1897
  49. package/biome/no-fallbacks.grit +0 -50
  50. package/gemini.key +0 -1
package/.env.example DELETED
@@ -1,152 +0,0 @@
1
- # DO NOT EDIT OR REMOVE!
2
- # COPY TO ~/.rummy.env or add appropriate
3
- # environment variables to ~/.bashrc or wherever
4
-
5
- # This project uses cascading environment variables
6
- # (environment) > ~/.rummy/.env > ~/.rummy/.env.example
7
-
8
- # Service Configuration
9
- RUMMY_PORT=3044
10
-
11
- # Absolute path, no ~
12
- # RUMMY_HOME=/home/ubuntu/.rummy
13
-
14
- RUMMY_DB_PATH=rummy.db
15
- # SQLite mmap size in MB
16
- RUMMY_MMAP_MB=0
17
-
18
- # Agent Loop Limits — per-loop cap (turns within a single loop).
19
- # No per-run cap; a run can comprise many loops.
20
- RUMMY_MAX_LOOP_TURNS=999
21
- # Hard cap on commands per turn — high by design. The real cost
22
- # ceiling is the Token Budget; per-tool rate limits (e.g.
23
- # RUMMY_WEB_SEARCH_MAX) bound the expensive tools individually.
24
- RUMMY_MAX_COMMANDS=99
25
- # Per-turn cap on <search>. Refusals strike via 429.
26
- RUMMY_WEB_SEARCH_MAX=1
27
- # Default candidate count per <search>. Brave caps at 20; the model can
28
- # still narrow per-call via <search results="N">.
29
- RUMMY_WEB_SEARCH_RESULTS=20
30
- RUMMY_MAX_STRIKES=3
31
- RUMMY_MIN_CYCLES=3
32
- RUMMY_MAX_CYCLE_PERIOD=4
33
- # Free turns in an FCRM admin stage (Decomposition or Demotion) before
34
- # the stagnation strike fires. Turn N+1 in the same admin stage emits a
35
- # "N+1 turns in current stage" reminder and contributes to the strike
36
- # streak (3 strikes → MAX_STRIKES → abandon). Distillation and Deployment
37
- # are exempt — those phases can grind for many turns on hard tasks.
38
- RUMMY_STAGNATION_FREE_TURNS=3
39
-
40
- # Hygiene
41
- # Days to keep completed/aborted runs before purging
42
- RUMMY_RETENTION_DAYS=31
43
-
44
- # Timeouts (ms)
45
- RUMMY_RPC_TIMEOUT=30000
46
- RUMMY_FETCH_TIMEOUT=300000
47
- RUMMY_WEB_FETCH_TIMEOUT=300000
48
- # Test harness — how long AuditClient waits for a single ask/act to reach
49
- # terminal status. Sized for full-context ingest on large-window models.
50
- RUMMY_TEST_RUN_TIMEOUT=3600000
51
- # rummy-cli watchdog — wall-clock budget for a single loop (one ask/act
52
- # CLI invocation). Overridable per invocation via --RUMMY_LOOP_TIMEOUT=<ms>.
53
- RUMMY_LOOP_TIMEOUT=86400000
54
-
55
- # Plugin module load watchdog.
56
- RUMMY_PLUGINS_LOAD_TIMEOUT=10000
57
-
58
- # Per-entry storage cap (bytes). Generous by design — rummy is a
59
- # memory-resident workspace, not a chat buffer — but bounded so a
60
- # pathological capture (e.g. 100 MB of vim escape codes from a single
61
- # <sh>) becomes a healthy 413 strike instead of an unbounded write.
62
- # Enforced at the SQLite layer (entries.body CHECK) and surfaced to
63
- # the model as an error.log entry the strike system can act on.
64
- RUMMY_ENTRY_SIZE_MAX=104857600
65
-
66
- # LLM retry policy: time-bounded exponential backoff with full jitter.
67
- # DEADLINE is total wall-clock budget for an LLM call across all retries.
68
- # MAX_BACKOFF caps each inter-attempt sleep so a long deadline doesn't
69
- # yield 10-minute waits between attempts.
70
- RUMMY_LLM_DEADLINE=600000
71
- RUMMY_LLM_MAX_BACKOFF=30000
72
-
73
- # Debug
74
- # RUMMY_DEBUG=true
75
-
76
- # Reasoning request flag forwarded to the LLM provider's `think`
77
- # parameter (gemma/llama.cpp: think=false skips server-side reasoning;
78
- # ollama: same). 1 asks the provider to reason and surface reasoning
79
- # content to rummy.
80
- #
81
- # Default 0 because forced reasoning on weak models (e.g. local gemma)
82
- # burns the n_ctx ceiling on `<think>` blocks and triggers reasoning-
83
- # runaway strikes. Opt in deliberately, per model.
84
- #
85
- # OpenRouter is intentionally orthogonal: rummy.web's openrouter plugin
86
- # always sends `include_reasoning: true` (relay-level always-on
87
- # telemetry — we pay the upstream cost regardless, so we keep the
88
- # reasoning bytes). RUMMY_THINK does not apply there.
89
- RUMMY_THINK=0
90
-
91
- # Budget
92
- # Fraction of context window used as ceiling. 0.9 = 90%, 10% reserved as headroom.
93
- RUMMY_BUDGET_CEILING=0.9
94
- # Maximum tokens per known entry. Entries exceeding this are rejected with 413.
95
- RUMMY_MAX_ENTRY_TOKENS=512
96
-
97
- # Token Estimation
98
- # Characters per token. Lower = more conservative (fewer tokens per character).
99
- # Default 2. Set to 1 for worst-case (1 token per character).
100
- RUMMY_TOKEN_DIVISOR=2
101
-
102
- # Model Behavior
103
- # LLM temperature (0 = deterministic, 0.7 = creative). Client can override per-request.
104
- RUMMY_TEMPERATURE=0.1
105
-
106
- # Run Attribute Defaults
107
- # Per-run attributes (passed in the run-creation set call) trump these.
108
- # Strict "1" enables; unset / "0" / "" disables. Useful in profile env
109
- # files (e.g. .env.tbench) layered via --env-file-if-exists.
110
- #
111
- # RUMMY_YOLO=1 # auto-accept every proposal (headless / CI / bench)
112
- # RUMMY_NO_INTERACTION=1 # exclude <ask_user> from the tool list
113
- # RUMMY_NO_WEB=1 # exclude <search> from the tool list
114
- # RUMMY_NO_PROPOSALS=1 # exclude <ask_user>/<env>/<sh>
115
- # RUMMY_NO_REPO=1 # skip rummy.repo scanning (file scan + overview)
116
-
117
- # Provider Configuration
118
- OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
119
- # OPENROUTER_API_KEY=
120
- RUMMY_HTTP_REFERER=https://github.com/possumtech/rummy
121
- # RUMMY_X_TITLE shows your app name in OpenRouter dashboards/rankings
122
- RUMMY_X_TITLE=RUMMY
123
-
124
- # OLLAMA_BASE_URL="http://127.0.0.1:11434"
125
-
126
- # OPENAI_BASE_URL="http://127.0.0.1:11434"
127
- # OPENAI_API_KEY=
128
-
129
- # XAI_BASE_URL="https://api.x.ai/v1"
130
- # XAI_API_KEY=""
131
-
132
- # Model Aliases (Optional)
133
- # First path segment picks the provider plugin; the rest is the
134
- # provider's own model identifier. OpenRouter is tri-level because
135
- # its API expects publisher/model; direct providers are bi-level.
136
- # RUMMY_MODEL_g420="xai/grok-4.20-reasoning-latest"
137
- # RUMMY_MODEL_grok="xai/grok-4-1-fast-reasoning-latest"
138
- # RUMMY_MODEL_opus="openrouter/anthropic/claude-opus-4.6"
139
- # RUMMY_MODEL_gpro="openrouter/google/gemini-3.1-pro-preview"
140
- # RUMMY_MODEL_gemma="openai/macher.gguf"
141
- # RUMMY_MODEL_qwen="ollama/qwen:7b"
142
-
143
- # Necessary for automated testing
144
- # RUMMY_TEST_MODEL=grok
145
-
146
- # Web Search
147
-
148
- # RUMMY_WEB_SEARXNG_URL="http://127.0.0.1:8888"
149
-
150
- # External plugins: npm i -g <package>, then uncomment
151
- # RUMMY_PLUGIN_WEB="@possumtech/rummy.web"
152
- # RUMMY_PLUGIN_REPO="@possumtech/rummy.repo"
package/.xai.key DELETED
@@ -1 +0,0 @@
1
- export XAI_API_KEY="xai-oI0qbXtb0SUCLqgw3qeDPhIytrRs2YuPn3zGIV0l8XSygn1s5M1ZglxfbFHvCJUrIYrIbQvurCzkLpZA"