@possumtech/rummy 0.5.0 → 2.0.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.
- package/.env.example +21 -5
- package/PLUGINS.md +389 -194
- package/README.md +25 -8
- package/SPEC.md +850 -373
- package/bin/demo.js +166 -0
- package/bin/rummy.js +9 -3
- package/biome/no-fallbacks.grit +50 -0
- package/lang/en.json +2 -2
- package/migrations/001_initial_schema.sql +88 -37
- package/package.json +6 -4
- package/service.js +50 -9
- package/src/agent/AgentLoop.js +460 -330
- package/src/agent/ContextAssembler.js +4 -4
- package/src/agent/Entries.js +655 -0
- package/src/agent/ProjectAgent.js +30 -18
- package/src/agent/TurnExecutor.js +229 -421
- package/src/agent/XmlParser.js +99 -33
- package/src/agent/budget.js +56 -0
- package/src/agent/errors.js +22 -0
- package/src/agent/httpStatus.js +39 -0
- package/src/agent/known_checks.sql +8 -4
- package/src/agent/known_queries.sql +9 -13
- package/src/agent/known_store.sql +275 -125
- package/src/agent/materializeContext.js +102 -0
- package/src/agent/runs.sql +10 -7
- package/src/agent/schemes.sql +14 -3
- package/src/agent/turns.sql +9 -9
- package/src/hooks/HookRegistry.js +6 -5
- package/src/hooks/Hooks.js +44 -3
- package/src/hooks/PluginContext.js +29 -21
- package/src/{server → hooks}/RpcRegistry.js +2 -1
- package/src/hooks/RummyContext.js +135 -35
- package/src/hooks/ToolRegistry.js +21 -16
- package/src/llm/LlmProvider.js +64 -90
- package/src/llm/errors.js +21 -0
- package/src/plugins/ask_user/README.md +1 -1
- package/src/plugins/ask_user/ask_user.js +37 -12
- package/src/plugins/ask_user/ask_userDoc.js +2 -25
- package/src/plugins/ask_user/ask_userDoc.md +10 -0
- package/src/plugins/budget/README.md +27 -25
- package/src/plugins/budget/budget.js +260 -88
- package/src/plugins/cp/README.md +2 -2
- package/src/plugins/cp/cp.js +29 -11
- package/src/plugins/cp/cpDoc.js +2 -15
- package/src/plugins/cp/cpDoc.md +7 -0
- package/src/plugins/engine/README.md +2 -2
- package/src/plugins/engine/engine.sql +4 -4
- package/src/plugins/engine/turn_context.sql +10 -10
- package/src/plugins/env/README.md +20 -5
- package/src/plugins/env/env.js +45 -6
- package/src/plugins/env/envDoc.js +2 -23
- package/src/plugins/env/envDoc.md +13 -0
- package/src/plugins/error/README.md +16 -0
- package/src/plugins/error/error.js +151 -0
- package/src/plugins/file/README.md +6 -6
- package/src/plugins/file/file.js +15 -2
- package/src/plugins/get/README.md +1 -1
- package/src/plugins/get/get.js +103 -48
- package/src/plugins/get/getDoc.js +2 -32
- package/src/plugins/get/getDoc.md +36 -0
- package/src/plugins/hedberg/README.md +1 -2
- package/src/plugins/hedberg/hedberg.js +8 -4
- package/src/plugins/hedberg/matcher.js +16 -17
- package/src/plugins/hedberg/normalize.js +0 -48
- package/src/plugins/helpers.js +42 -2
- package/src/plugins/index.js +146 -123
- package/src/plugins/instructions/README.md +35 -9
- package/src/plugins/instructions/instructions.js +122 -9
- package/src/plugins/instructions/instructions.md +25 -0
- package/src/plugins/instructions/instructions_104.md +7 -0
- package/src/plugins/instructions/instructions_105.md +46 -0
- package/src/plugins/instructions/instructions_106.md +0 -0
- package/src/plugins/instructions/instructions_107.md +0 -0
- package/src/plugins/instructions/instructions_108.md +8 -0
- package/src/plugins/instructions/protocol.js +12 -0
- package/src/plugins/known/README.md +2 -2
- package/src/plugins/known/known.js +67 -36
- package/src/plugins/known/knownDoc.js +2 -17
- package/src/plugins/known/knownDoc.md +8 -0
- package/src/plugins/log/README.md +48 -0
- package/src/plugins/log/log.js +109 -0
- package/src/plugins/mv/README.md +2 -2
- package/src/plugins/mv/mv.js +55 -22
- package/src/plugins/mv/mvDoc.js +2 -18
- package/src/plugins/mv/mvDoc.md +10 -0
- package/src/plugins/ollama/README.md +15 -0
- package/src/{llm/OllamaClient.js → plugins/ollama/ollama.js} +40 -18
- package/src/plugins/openai/README.md +17 -0
- package/src/plugins/openai/openai.js +120 -0
- package/src/plugins/openrouter/README.md +27 -0
- package/src/plugins/openrouter/openrouter.js +121 -0
- package/src/plugins/persona/README.md +20 -0
- package/src/plugins/persona/persona.js +9 -16
- package/src/plugins/policy/README.md +21 -0
- package/src/plugins/policy/policy.js +29 -14
- package/src/plugins/prompt/README.md +1 -1
- package/src/plugins/prompt/prompt.js +58 -16
- package/src/plugins/rm/README.md +1 -1
- package/src/plugins/rm/rm.js +56 -12
- package/src/plugins/rm/rmDoc.js +2 -20
- package/src/plugins/rm/rmDoc.md +13 -0
- package/src/plugins/rpc/README.md +2 -2
- package/src/plugins/rpc/rpc.js +515 -296
- package/src/plugins/set/README.md +1 -1
- package/src/plugins/set/set.js +318 -75
- package/src/plugins/set/setDoc.js +2 -35
- package/src/plugins/set/setDoc.md +22 -0
- package/src/plugins/sh/README.md +28 -5
- package/src/plugins/sh/sh.js +50 -6
- package/src/plugins/sh/shDoc.js +2 -23
- package/src/plugins/sh/shDoc.md +13 -0
- package/src/plugins/skill/README.md +23 -0
- package/src/plugins/skill/skill.js +14 -18
- package/src/plugins/stream/README.md +101 -0
- package/src/plugins/stream/stream.js +290 -0
- package/src/plugins/telemetry/README.md +1 -1
- package/src/plugins/telemetry/telemetry.js +129 -80
- package/src/plugins/think/README.md +1 -1
- package/src/plugins/think/think.js +12 -0
- package/src/plugins/think/thinkDoc.js +2 -15
- package/src/plugins/think/thinkDoc.md +7 -0
- package/src/plugins/unknown/README.md +3 -3
- package/src/plugins/unknown/unknown.js +47 -19
- package/src/plugins/unknown/unknownDoc.js +2 -21
- package/src/plugins/unknown/unknownDoc.md +11 -0
- package/src/plugins/update/README.md +1 -1
- package/src/plugins/update/update.js +67 -5
- package/src/plugins/update/updateDoc.js +2 -30
- package/src/plugins/update/updateDoc.md +8 -0
- package/src/plugins/xai/README.md +23 -0
- package/src/{llm/XaiClient.js → plugins/xai/xai.js} +58 -37
- package/src/server/ClientConnection.js +64 -37
- package/src/server/SocketServer.js +23 -10
- package/src/server/protocol.js +11 -0
- package/src/sql/v_model_context.sql +27 -31
- package/src/sql/v_run_log.sql +9 -14
- package/EXCEPTIONS.md +0 -46
- package/FIDELITY_CONTRACT.md +0 -172
- package/src/agent/KnownStore.js +0 -337
- package/src/agent/ResponseHealer.js +0 -241
- package/src/llm/OpenAiClient.js +0 -100
- package/src/llm/OpenRouterClient.js +0 -100
- package/src/plugins/budget/recovery.js +0 -47
- package/src/plugins/instructions/preamble.md +0 -45
- package/src/plugins/performed/README.md +0 -15
- package/src/plugins/performed/performed.js +0 -45
- package/src/plugins/previous/README.md +0 -16
- package/src/plugins/previous/previous.js +0 -56
- package/src/plugins/progress/README.md +0 -16
- package/src/plugins/progress/progress.js +0 -43
- package/src/plugins/summarize/README.md +0 -19
- package/src/plugins/summarize/summarize.js +0 -32
- package/src/plugins/summarize/summarizeDoc.js +0 -27
|
@@ -1,40 +1,35 @@
|
|
|
1
1
|
import LlmProvider from "../llm/LlmProvider.js";
|
|
2
2
|
import AgentLoop from "./AgentLoop.js";
|
|
3
|
-
import
|
|
3
|
+
import Entries from "./Entries.js";
|
|
4
4
|
import TurnExecutor from "./TurnExecutor.js";
|
|
5
5
|
|
|
6
6
|
export default class ProjectAgent {
|
|
7
7
|
#db;
|
|
8
8
|
#hooks;
|
|
9
9
|
#agentLoop;
|
|
10
|
-
#
|
|
10
|
+
#entries;
|
|
11
11
|
#llm;
|
|
12
12
|
|
|
13
13
|
constructor(db, hooks) {
|
|
14
14
|
this.#db = db;
|
|
15
15
|
this.#hooks = hooks;
|
|
16
|
-
this.#llm = new LlmProvider(db);
|
|
17
|
-
this.#
|
|
18
|
-
onChanged: (event) => hooks.entry.changed.emit(event)
|
|
16
|
+
this.#llm = new LlmProvider(db, hooks);
|
|
17
|
+
this.#entries = new Entries(db, {
|
|
18
|
+
onChanged: (event) => hooks.entry.changed.emit(event),
|
|
19
19
|
});
|
|
20
|
-
this.#
|
|
20
|
+
this.#entries.loadSchemes(db);
|
|
21
21
|
|
|
22
|
-
const turnExecutor = new TurnExecutor(
|
|
23
|
-
db,
|
|
24
|
-
this.#llm,
|
|
25
|
-
hooks,
|
|
26
|
-
this.#knownStore,
|
|
27
|
-
);
|
|
22
|
+
const turnExecutor = new TurnExecutor(db, this.#llm, hooks, this.#entries);
|
|
28
23
|
this.#agentLoop = new AgentLoop(
|
|
29
24
|
db,
|
|
30
25
|
this.#llm,
|
|
31
26
|
hooks,
|
|
32
27
|
turnExecutor,
|
|
33
|
-
this.#
|
|
28
|
+
this.#entries,
|
|
34
29
|
);
|
|
35
30
|
}
|
|
36
31
|
|
|
37
|
-
async init(projectName, projectRoot, configPath) {
|
|
32
|
+
async init(projectName, projectRoot, configPath = null) {
|
|
38
33
|
await this.#hooks.project.init.started.emit({
|
|
39
34
|
projectName,
|
|
40
35
|
projectRoot,
|
|
@@ -43,7 +38,7 @@ export default class ProjectAgent {
|
|
|
43
38
|
const projectRow = await this.#db.upsert_project.get({
|
|
44
39
|
name: projectName,
|
|
45
40
|
project_root: projectRoot,
|
|
46
|
-
config_path: configPath
|
|
41
|
+
config_path: configPath,
|
|
47
42
|
});
|
|
48
43
|
const projectId = projectRow.id;
|
|
49
44
|
|
|
@@ -57,7 +52,7 @@ export default class ProjectAgent {
|
|
|
57
52
|
}
|
|
58
53
|
|
|
59
54
|
get entries() {
|
|
60
|
-
return this.#
|
|
55
|
+
return this.#entries;
|
|
61
56
|
}
|
|
62
57
|
|
|
63
58
|
async ask(projectId, model, prompt, run = null, options = {}) {
|
|
@@ -88,8 +83,16 @@ export default class ProjectAgent {
|
|
|
88
83
|
return this.#agentLoop.resolve(run, resolution);
|
|
89
84
|
}
|
|
90
85
|
|
|
91
|
-
async inject(run, message) {
|
|
92
|
-
return this.#agentLoop.inject(run, message);
|
|
86
|
+
async inject(run, message, mode) {
|
|
87
|
+
return this.#agentLoop.inject(run, message, mode);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Synchronously create (or fork) a run row and return the alias.
|
|
91
|
+
// Caller is expected to follow up with a kickoff (ask/act) that
|
|
92
|
+
// operates on the returned alias. Lets RPC respond with the real
|
|
93
|
+
// alias before the long-running loop starts.
|
|
94
|
+
async ensureRun(projectId, model, run, prompt, options = {}) {
|
|
95
|
+
return this.#agentLoop.ensureRun(projectId, model, run, prompt, options);
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
async getRunHistory(run) {
|
|
@@ -99,4 +102,13 @@ export default class ProjectAgent {
|
|
|
99
102
|
abortRun(runId) {
|
|
100
103
|
this.#agentLoop.abort(runId);
|
|
101
104
|
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Abort every in-flight run and wait for them to settle. Called
|
|
108
|
+
* from the server's close path so the Node event loop isn't held
|
|
109
|
+
* open by detached kickoff Promises after shutdown.
|
|
110
|
+
*/
|
|
111
|
+
async shutdown() {
|
|
112
|
+
await this.#agentLoop.abortAll();
|
|
113
|
+
}
|
|
102
114
|
}
|