@possumtech/rummy 0.2.7 → 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 (119) hide show
  1. package/.env.example +12 -3
  2. package/EXCEPTIONS.md +46 -0
  3. package/PLUGINS.md +454 -197
  4. package/SPEC.md +284 -93
  5. package/migrations/001_initial_schema.sql +57 -70
  6. package/package.json +16 -10
  7. package/service.js +1 -1
  8. package/src/agent/AgentLoop.js +254 -70
  9. package/src/agent/ContextAssembler.js +18 -4
  10. package/src/agent/KnownStore.js +156 -23
  11. package/src/agent/ProjectAgent.js +5 -4
  12. package/src/agent/ResponseHealer.js +21 -1
  13. package/src/agent/TurnExecutor.js +393 -115
  14. package/src/agent/XmlParser.js +92 -39
  15. package/src/agent/known_checks.sql +5 -4
  16. package/src/agent/known_queries.sql +4 -3
  17. package/src/agent/known_store.sql +45 -15
  18. package/src/agent/loops.sql +63 -0
  19. package/src/agent/runs.sql +7 -7
  20. package/src/agent/schemes.sql +5 -2
  21. package/src/agent/tokens.js +6 -21
  22. package/src/agent/turns.sql +13 -4
  23. package/src/hooks/Hooks.js +18 -0
  24. package/src/hooks/PluginContext.js +14 -10
  25. package/src/hooks/RummyContext.js +30 -10
  26. package/src/hooks/ToolRegistry.js +83 -19
  27. package/src/llm/LlmProvider.js +27 -8
  28. package/src/llm/OpenAiClient.js +20 -0
  29. package/src/llm/OpenRouterClient.js +24 -2
  30. package/src/llm/XaiClient.js +47 -2
  31. package/src/plugins/ask_user/README.md +4 -4
  32. package/src/plugins/ask_user/ask_user.js +8 -7
  33. package/src/plugins/ask_user/ask_userDoc.js +29 -0
  34. package/src/plugins/budget/BudgetGuard.js +74 -0
  35. package/src/plugins/budget/README.md +43 -0
  36. package/src/plugins/budget/budget.js +79 -0
  37. package/src/plugins/cp/README.md +5 -4
  38. package/src/plugins/cp/cp.js +16 -12
  39. package/src/plugins/cp/cpDoc.js +29 -0
  40. package/src/plugins/current/README.md +4 -4
  41. package/src/plugins/current/current.js +12 -10
  42. package/src/plugins/engine/engine.sql +5 -10
  43. package/src/plugins/engine/turn_context.sql +13 -13
  44. package/src/plugins/env/README.md +3 -4
  45. package/src/plugins/env/env.js +8 -7
  46. package/src/plugins/env/envDoc.js +29 -0
  47. package/src/plugins/file/README.md +9 -12
  48. package/src/plugins/file/file.js +34 -45
  49. package/src/plugins/get/README.md +2 -2
  50. package/src/plugins/get/get.js +28 -11
  51. package/src/plugins/get/getDoc.js +41 -0
  52. package/src/plugins/hedberg/docs.md +0 -9
  53. package/src/plugins/hedberg/hedberg.js +4 -6
  54. package/src/plugins/hedberg/matcher.js +1 -1
  55. package/src/plugins/hedberg/normalize.js +28 -0
  56. package/src/plugins/hedberg/patterns.js +31 -33
  57. package/src/plugins/hedberg/sed.js +17 -10
  58. package/src/plugins/helpers.js +2 -2
  59. package/src/plugins/index.js +93 -28
  60. package/src/plugins/instructions/README.md +6 -2
  61. package/src/plugins/instructions/instructions.js +21 -5
  62. package/src/plugins/instructions/preamble.md +9 -5
  63. package/src/plugins/known/README.md +10 -7
  64. package/src/plugins/known/known.js +33 -23
  65. package/src/plugins/known/knownDoc.js +33 -0
  66. package/src/plugins/mv/README.md +5 -4
  67. package/src/plugins/mv/mv.js +16 -12
  68. package/src/plugins/mv/mvDoc.js +31 -0
  69. package/src/plugins/persona/persona.js +78 -0
  70. package/src/plugins/previous/README.md +2 -2
  71. package/src/plugins/previous/previous.js +12 -8
  72. package/src/plugins/progress/progress.js +44 -12
  73. package/src/plugins/prompt/README.md +5 -5
  74. package/src/plugins/prompt/prompt.js +23 -19
  75. package/src/plugins/rm/README.md +4 -4
  76. package/src/plugins/rm/rm.js +29 -12
  77. package/src/plugins/rm/rmDoc.js +30 -0
  78. package/src/plugins/rpc/README.md +15 -28
  79. package/src/plugins/rpc/rpc.js +63 -107
  80. package/src/plugins/set/README.md +13 -12
  81. package/src/plugins/set/set.js +82 -21
  82. package/src/plugins/set/setDoc.js +45 -0
  83. package/src/plugins/sh/README.md +4 -4
  84. package/src/plugins/sh/sh.js +8 -7
  85. package/src/plugins/sh/shDoc.js +29 -0
  86. package/src/plugins/{skills/skills.js → skill/skill.js} +12 -54
  87. package/src/plugins/summarize/README.md +6 -5
  88. package/src/plugins/summarize/summarize.js +7 -6
  89. package/src/plugins/summarize/summarizeDoc.js +33 -0
  90. package/src/plugins/telemetry/telemetry.js +20 -8
  91. package/src/plugins/think/README.md +20 -0
  92. package/src/plugins/think/think.js +5 -0
  93. package/src/plugins/unknown/README.md +5 -5
  94. package/src/plugins/unknown/unknown.js +11 -8
  95. package/src/plugins/unknown/unknownDoc.js +31 -0
  96. package/src/plugins/update/README.md +3 -8
  97. package/src/plugins/update/update.js +7 -6
  98. package/src/plugins/update/updateDoc.js +33 -0
  99. package/src/server/ClientConnection.js +3 -5
  100. package/src/server/RpcRegistry.js +52 -4
  101. package/src/sql/v_model_context.sql +31 -39
  102. package/src/sql/v_run_log.sql +3 -3
  103. package/src/agent/prompt_queue.sql +0 -39
  104. package/src/plugins/ask_user/docs.md +0 -2
  105. package/src/plugins/cp/docs.md +0 -2
  106. package/src/plugins/env/docs.md +0 -2
  107. package/src/plugins/get/docs.md +0 -6
  108. package/src/plugins/known/docs.md +0 -3
  109. package/src/plugins/mv/docs.md +0 -2
  110. package/src/plugins/rm/docs.md +0 -4
  111. package/src/plugins/set/docs.md +0 -4
  112. package/src/plugins/sh/docs.md +0 -2
  113. package/src/plugins/skills/README.md +0 -25
  114. package/src/plugins/store/README.md +0 -20
  115. package/src/plugins/store/docs.md +0 -5
  116. package/src/plugins/store/store.js +0 -52
  117. package/src/plugins/summarize/docs.md +0 -4
  118. package/src/plugins/unknown/docs.md +0 -5
  119. package/src/plugins/update/docs.md +0 -4
package/.env.example CHANGED
@@ -18,7 +18,9 @@ RUMMY_MMAP_MB=0
18
18
  # Agent Loop Limits
19
19
  RUMMY_MAX_TURNS=99
20
20
  RUMMY_MAX_UNKNOWN_WARNINGS=3
21
+ RUMMY_MAX_STALLS=3
21
22
  RUMMY_MAX_REPETITIONS=3
23
+ RUMMY_MAX_UPDATE_REPEATS=3
22
24
 
23
25
  # Hygiene
24
26
  # Days to keep completed/aborted runs before purging
@@ -26,7 +28,15 @@ RUMMY_RETENTION_DAYS=31
26
28
 
27
29
  # Timeouts (ms)
28
30
  RUMMY_RPC_TIMEOUT=30000
29
- RUMMY_FETCH_TIMEOUT=120000
31
+ RUMMY_FETCH_TIMEOUT=300000
32
+
33
+ # Debug
34
+ # RUMMY_DEBUG=true
35
+
36
+ # Token Estimation
37
+ # Characters per token. Lower = more conservative (fewer tokens per character).
38
+ # Default 2. Set to 1 for worst-case (1 token per character).
39
+ RUMMY_TOKEN_DIVISOR=2
30
40
 
31
41
  # Model Behavior
32
42
  # LLM temperature (0 = deterministic, 0.7 = creative). Client can override per-request.
@@ -57,7 +67,6 @@ RUMMY_X_TITLE=RUMMY
57
67
  # Web Search
58
68
  # RUMMY_SEARXNG_URL="http://127.0.0.1:8888"
59
69
 
60
- # required for web fetch and search
70
+ # External plugins: npm i -g <package>, then uncomment
61
71
  # RUMMY_PLUGIN_WEB="@possumtech/rummy.web"
62
- # required for git repo and repomap/symbol functionality
63
72
  # RUMMY_PLUGIN_REPO="@possumtech/rummy.repo"
package/EXCEPTIONS.md ADDED
@@ -0,0 +1,46 @@
1
+ # EXCEPTIONS.md — Documented Backbone Responsibilities
2
+
3
+ Operations that bypass the plugin protocol. Each must justify WHY it
4
+ can't go through the standard tool handler path. If the justification
5
+ is weak, the exception should be eliminated.
6
+
7
+ ## Resolved
8
+
9
+ ### File.setConstraint / File.dropConstraint
10
+
11
+ **What:** Direct DB writes to `file_constraints` table.
12
+ **Justification:** File constraints are project-level config — they
13
+ define which files a project cares about. This is backbone, not tool
14
+ dispatch. Entry promotion/demotion that follows constraints now goes
15
+ through the standard tool handler chain via `dispatchTool`.
16
+ **Boundary documented:** SPEC.md §2.3.
17
+
18
+ ## Currently Identified
19
+
20
+ ### 1. TurnExecutor#record — tool-specific handling
21
+
22
+ **What:** `known`, `unknown`, `summarize`, `update` have special-case
23
+ code in `#record` (dedup, slug paths, lifecycle classification).
24
+ **Bypasses:** These tools don't go through the same dispatch path as
25
+ `get`, `set`, `rm` etc.
26
+ **Justification:** Lifecycle signals (`summarize`, `update`) are state
27
+ declarations, not tool operations — they always dispatch and cannot be
28
+ 409'd. `known` and `unknown` generate their own paths from body content
29
+ (slug paths). The classification is a fundamental architectural split
30
+ (lifecycle vs action), not a protocol violation.
31
+
32
+ ### 2. Token math — multiple measurement points
33
+
34
+ **What:** `known_entries.tokens`, `turn_context.tokens`,
35
+ `turns.context_tokens`, `countTokens()` estimates.
36
+ **Bypasses:** No single function call, but a strict rule.
37
+ **Justification:** Each serves a different purpose. `known_entries.tokens`
38
+ is display-only (model sees entry sizes in `<knowns>`). `turn_context.tokens`
39
+ is per-turn snapshot. `turns.context_tokens` is assembled ground truth for
40
+ budget. The rule: budget decisions use ONLY assembled message tokens.
41
+ DB tokens are NEVER used for budget. Documented in PLUGINS.md §7.5.
42
+
43
+ ---
44
+
45
+ *This file should shrink over time. Every entry is a debt to be paid
46
+ or a boundary to be justified.*