@possumtech/rummy 0.2.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 (120) hide show
  1. package/.env.example +55 -0
  2. package/LICENSE +21 -0
  3. package/PLUGINS.md +302 -0
  4. package/README.md +41 -0
  5. package/SPEC.md +524 -0
  6. package/lang/en.json +34 -0
  7. package/migrations/001_initial_schema.sql +226 -0
  8. package/package.json +54 -0
  9. package/service.js +143 -0
  10. package/src/agent/AgentLoop.js +553 -0
  11. package/src/agent/ContextAssembler.js +29 -0
  12. package/src/agent/KnownStore.js +254 -0
  13. package/src/agent/ProjectAgent.js +101 -0
  14. package/src/agent/ResponseHealer.js +134 -0
  15. package/src/agent/TurnExecutor.js +457 -0
  16. package/src/agent/XmlParser.js +247 -0
  17. package/src/agent/known_checks.sql +42 -0
  18. package/src/agent/known_queries.sql +80 -0
  19. package/src/agent/known_store.sql +161 -0
  20. package/src/agent/messages.js +17 -0
  21. package/src/agent/prompt_queue.sql +39 -0
  22. package/src/agent/runs.sql +114 -0
  23. package/src/agent/schemes.sql +3 -0
  24. package/src/agent/sessions.sql +51 -0
  25. package/src/agent/tokens.js +28 -0
  26. package/src/agent/turns.sql +36 -0
  27. package/src/hooks/HookRegistry.js +72 -0
  28. package/src/hooks/Hooks.js +115 -0
  29. package/src/hooks/PluginContext.js +116 -0
  30. package/src/hooks/RummyContext.js +181 -0
  31. package/src/hooks/ToolRegistry.js +83 -0
  32. package/src/llm/LlmProvider.js +107 -0
  33. package/src/llm/OllamaClient.js +88 -0
  34. package/src/llm/OpenAiClient.js +80 -0
  35. package/src/llm/OpenRouterClient.js +78 -0
  36. package/src/llm/XaiClient.js +113 -0
  37. package/src/plugins/ask_user/README.md +18 -0
  38. package/src/plugins/ask_user/ask_user.js +48 -0
  39. package/src/plugins/ask_user/docs.md +2 -0
  40. package/src/plugins/cp/README.md +18 -0
  41. package/src/plugins/cp/cp.js +55 -0
  42. package/src/plugins/cp/docs.md +2 -0
  43. package/src/plugins/current/README.md +14 -0
  44. package/src/plugins/current/current.js +48 -0
  45. package/src/plugins/engine/README.md +12 -0
  46. package/src/plugins/engine/engine.sql +18 -0
  47. package/src/plugins/engine/turn_context.sql +51 -0
  48. package/src/plugins/env/README.md +14 -0
  49. package/src/plugins/env/docs.md +2 -0
  50. package/src/plugins/env/env.js +32 -0
  51. package/src/plugins/file/README.md +25 -0
  52. package/src/plugins/file/file.js +85 -0
  53. package/src/plugins/get/README.md +19 -0
  54. package/src/plugins/get/docs.md +6 -0
  55. package/src/plugins/get/get.js +53 -0
  56. package/src/plugins/hedberg/README.md +72 -0
  57. package/src/plugins/hedberg/docs.md +9 -0
  58. package/src/plugins/hedberg/edits.js +65 -0
  59. package/src/plugins/hedberg/hedberg.js +89 -0
  60. package/src/plugins/hedberg/matcher.js +181 -0
  61. package/src/plugins/hedberg/normalize.js +41 -0
  62. package/src/plugins/hedberg/patterns.js +452 -0
  63. package/src/plugins/hedberg/sed.js +48 -0
  64. package/src/plugins/helpers.js +22 -0
  65. package/src/plugins/index.js +180 -0
  66. package/src/plugins/instructions/README.md +11 -0
  67. package/src/plugins/instructions/instructions.js +37 -0
  68. package/src/plugins/instructions/preamble.md +12 -0
  69. package/src/plugins/known/README.md +18 -0
  70. package/src/plugins/known/docs.md +3 -0
  71. package/src/plugins/known/known.js +57 -0
  72. package/src/plugins/mv/README.md +18 -0
  73. package/src/plugins/mv/docs.md +2 -0
  74. package/src/plugins/mv/mv.js +56 -0
  75. package/src/plugins/previous/README.md +15 -0
  76. package/src/plugins/previous/previous.js +50 -0
  77. package/src/plugins/progress/README.md +17 -0
  78. package/src/plugins/progress/progress.js +44 -0
  79. package/src/plugins/prompt/README.md +16 -0
  80. package/src/plugins/prompt/prompt.js +45 -0
  81. package/src/plugins/rm/README.md +18 -0
  82. package/src/plugins/rm/docs.md +4 -0
  83. package/src/plugins/rm/rm.js +51 -0
  84. package/src/plugins/rpc/README.md +45 -0
  85. package/src/plugins/rpc/rpc.js +587 -0
  86. package/src/plugins/set/README.md +32 -0
  87. package/src/plugins/set/docs.md +4 -0
  88. package/src/plugins/set/set.js +268 -0
  89. package/src/plugins/sh/README.md +18 -0
  90. package/src/plugins/sh/docs.md +2 -0
  91. package/src/plugins/sh/sh.js +32 -0
  92. package/src/plugins/skills/README.md +25 -0
  93. package/src/plugins/skills/skills.js +175 -0
  94. package/src/plugins/store/README.md +20 -0
  95. package/src/plugins/store/docs.md +5 -0
  96. package/src/plugins/store/store.js +52 -0
  97. package/src/plugins/summarize/README.md +18 -0
  98. package/src/plugins/summarize/docs.md +4 -0
  99. package/src/plugins/summarize/summarize.js +24 -0
  100. package/src/plugins/telemetry/README.md +19 -0
  101. package/src/plugins/telemetry/rpc_log.sql +28 -0
  102. package/src/plugins/telemetry/telemetry.js +186 -0
  103. package/src/plugins/unknown/README.md +23 -0
  104. package/src/plugins/unknown/docs.md +5 -0
  105. package/src/plugins/unknown/unknown.js +31 -0
  106. package/src/plugins/update/README.md +18 -0
  107. package/src/plugins/update/docs.md +4 -0
  108. package/src/plugins/update/update.js +24 -0
  109. package/src/server/ClientConnection.js +228 -0
  110. package/src/server/RpcRegistry.js +52 -0
  111. package/src/server/SocketServer.js +43 -0
  112. package/src/sql/file_constraints.sql +15 -0
  113. package/src/sql/functions/countTokens.js +7 -0
  114. package/src/sql/functions/hedmatch.js +8 -0
  115. package/src/sql/functions/hedreplace.js +8 -0
  116. package/src/sql/functions/hedsearch.js +8 -0
  117. package/src/sql/functions/schemeOf.js +7 -0
  118. package/src/sql/functions/slugify.js +6 -0
  119. package/src/sql/v_model_context.sql +101 -0
  120. package/src/sql/v_run_log.sql +23 -0
@@ -0,0 +1,7 @@
1
+ export const deterministic = true;
2
+
3
+ export default function (path) {
4
+ if (!path) return null;
5
+ const idx = path.indexOf("://");
6
+ return idx > 0 ? path.slice(0, idx) : null;
7
+ }
@@ -0,0 +1,6 @@
1
+ export const deterministic = true;
2
+
3
+ export default function slugify(text) {
4
+ if (!text) return "";
5
+ return encodeURIComponent(text).slice(0, 80);
6
+ }
@@ -0,0 +1,101 @@
1
+ -- INIT: create_v_model_context
2
+ CREATE VIEW IF NOT EXISTS v_model_context AS
3
+ WITH
4
+ classified AS (
5
+ SELECT
6
+ ke.run_id
7
+ , ke.id
8
+ , ke.path
9
+ , ke.body
10
+ , ke.scheme
11
+ , ke.state
12
+ , ke.turn
13
+ , ke.updated_at
14
+ , ke.attributes
15
+ , ke.tokens AS tokens_full
16
+ , CASE
17
+ -- Proposed entries hidden until resolved
18
+ WHEN ke.state = 'proposed' THEN NULL
19
+ -- Audit schemes (model_visible = 0) hidden
20
+ WHEN s.model_visible = 0 THEN NULL
21
+ -- State IS fidelity for visible entries
22
+ WHEN ke.state IN ('full', 'summary', 'index') THEN ke.state
23
+ -- Stored entries hidden (retrievable via <read>)
24
+ WHEN ke.state = 'stored' THEN NULL
25
+ -- Result/structural states are visible at full fidelity
26
+ WHEN ke.state IN ('pass', 'error', 'warn', 'pattern', 'read', 'info', 'summary') THEN 'full'
27
+ ELSE NULL
28
+ END AS fidelity
29
+ FROM known_entries AS ke
30
+ JOIN schemes AS s ON s.name = COALESCE(ke.scheme, 'file')
31
+ WHERE ke.state NOT IN ('proposed')
32
+ ),
33
+ projected AS (
34
+ SELECT
35
+ run_id
36
+ , id
37
+ , path
38
+ , scheme
39
+ , state
40
+ , fidelity
41
+ , turn
42
+ , updated_at
43
+ , attributes
44
+ , CASE
45
+ WHEN fidelity IN ('full', 'summary') THEN body
46
+ ELSE ''
47
+ END AS body
48
+ , CASE
49
+ WHEN scheme IS NULL AND state IN ('full', 'summary') THEN 'file'
50
+ WHEN scheme IS NULL THEN 'file_index'
51
+ WHEN scheme IN ('http', 'https') AND state IN ('full', 'summary') THEN 'file'
52
+ WHEN scheme IN ('http', 'https') THEN 'file_index'
53
+ WHEN scheme IN ('known', 'skill') AND state = 'full' THEN 'known'
54
+ WHEN scheme IN ('known', 'skill') THEN 'known_index'
55
+ WHEN scheme = 'unknown' THEN 'unknown'
56
+ WHEN scheme IN ('ask', 'act', 'progress') THEN 'prompt'
57
+ WHEN scheme = 'summarize' THEN 'structural'
58
+ WHEN scheme = 'update' THEN 'structural'
59
+ WHEN scheme = 'tool' THEN 'tool'
60
+ ELSE 'result'
61
+ END AS category
62
+ FROM classified
63
+ WHERE fidelity IS NOT NULL
64
+ )
65
+ SELECT
66
+ run_id
67
+ , path
68
+ , scheme
69
+ , fidelity
70
+ , state
71
+ , body
72
+ , attributes
73
+ , category
74
+ , turn
75
+ , ROW_NUMBER() OVER (
76
+ PARTITION BY run_id
77
+ ORDER BY
78
+ CASE category
79
+ WHEN 'tool' THEN 1
80
+ WHEN 'known' THEN 2
81
+ WHEN 'known_index' THEN 2
82
+ WHEN 'file_index' THEN 2
83
+ WHEN 'file' THEN 2
84
+ WHEN 'result' THEN 3
85
+ WHEN 'structural' THEN 4
86
+ WHEN 'unknown' THEN 5
87
+ WHEN 'prompt' THEN 6
88
+ ELSE 6
89
+ END
90
+ , CASE scheme WHEN 'skill' THEN 0 ELSE 1 END
91
+ , CASE state
92
+ WHEN 'index' THEN 0
93
+ WHEN 'summary' THEN 1
94
+ ELSE 2
95
+ END
96
+ , turn
97
+ , updated_at
98
+ , id
99
+ ) AS ordinal
100
+ , countTokens(body) AS tokens
101
+ FROM projected;
@@ -0,0 +1,23 @@
1
+ -- INIT: create_v_run_log
2
+ CREATE VIEW IF NOT EXISTS v_run_log AS
3
+ SELECT
4
+ ke.run_id
5
+ , ke.path
6
+ , ke.body
7
+ , ke.state AS status
8
+ , COALESCE(ke.scheme, ke.state) AS tool
9
+ , COALESCE(
10
+ json_extract(ke.attributes, '$.command')
11
+ , json_extract(ke.attributes, '$.file')
12
+ , json_extract(ke.attributes, '$.path')
13
+ , json_extract(ke.attributes, '$.question')
14
+ , ''
15
+ ) AS target
16
+ FROM known_entries AS ke
17
+ JOIN schemes AS s ON s.name = COALESCE(ke.scheme, 'file')
18
+ WHERE
19
+ ke.scheme IS NOT NULL
20
+ AND ke.state != 'proposed'
21
+ AND s.category NOT IN ('knowledge', 'file')
22
+ AND ke.scheme NOT IN ('system', 'reasoning', 'model', 'content')
23
+ ORDER BY ke.id;