@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.
- package/.env.example +42 -5
- package/PLUGINS.md +389 -194
- package/README.md +25 -8
- package/SPEC.md +934 -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 +13 -11
- package/scriptify/ask_run.js +77 -0
- package/service.js +50 -9
- package/src/agent/AgentLoop.js +476 -335
- package/src/agent/ContextAssembler.js +4 -4
- package/src/agent/Entries.js +676 -0
- package/src/agent/ProjectAgent.js +30 -18
- package/src/agent/TurnExecutor.js +232 -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 +280 -125
- package/src/agent/materializeContext.js +104 -0
- package/src/agent/runs.sql +29 -7
- package/src/agent/schemes.sql +14 -3
- package/src/agent/tokens.js +6 -0
- 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 +139 -35
- package/src/hooks/ToolRegistry.js +21 -16
- package/src/llm/LlmProvider.js +66 -89
- package/src/llm/errors.js +21 -0
- package/src/llm/retry.js +63 -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 +306 -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 +244 -9
- package/src/plugins/instructions/instructions.md +33 -0
- package/src/plugins/instructions/instructions_104.md +7 -0
- package/src/plugins/instructions/instructions_105.md +38 -0
- package/src/plugins/instructions/instructions_106.md +21 -0
- package/src/plugins/instructions/instructions_107.md +10 -0
- package/src/plugins/instructions/instructions_108.md +0 -0
- package/src/plugins/instructions/protocol.js +12 -0
- package/src/plugins/known/README.md +2 -2
- package/src/plugins/known/known.js +68 -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 +129 -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 +64 -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 +525 -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 +83 -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/plugins/yolo/yolo.js +192 -0
- 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,43 +0,0 @@
|
|
|
1
|
-
const CEILING_RATIO = Number(process.env.RUMMY_BUDGET_CEILING);
|
|
2
|
-
if (!CEILING_RATIO) throw new Error("RUMMY_BUDGET_CEILING must be set");
|
|
3
|
-
|
|
4
|
-
export default class Progress {
|
|
5
|
-
#core;
|
|
6
|
-
|
|
7
|
-
constructor(core) {
|
|
8
|
-
this.#core = core;
|
|
9
|
-
core.filter("assembly.user", this.assembleProgress.bind(this), 200);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
async assembleProgress(content, ctx) {
|
|
13
|
-
const { rows, contextSize, baselineTokens } = ctx;
|
|
14
|
-
const lines = [];
|
|
15
|
-
|
|
16
|
-
if (contextSize) {
|
|
17
|
-
const ceiling = Math.floor(contextSize * CEILING_RATIO);
|
|
18
|
-
const tokenBudget = Math.max(0, ceiling - (baselineTokens || 0));
|
|
19
|
-
// Used = sum of promoted controllable entries' tokens. Same units as
|
|
20
|
-
// per-entry tokens="N" so the model can predict the effect of a
|
|
21
|
-
// promote/demote: change is exactly the entry's tokens attribute.
|
|
22
|
-
const used = rows.reduce((sum, r) => {
|
|
23
|
-
if (
|
|
24
|
-
(r.category === "data" || r.category === "logging") &&
|
|
25
|
-
r.fidelity === "promoted"
|
|
26
|
-
) {
|
|
27
|
-
return sum + (r.tokens || 0);
|
|
28
|
-
}
|
|
29
|
-
return sum;
|
|
30
|
-
}, 0);
|
|
31
|
-
const remaining = Math.max(0, tokenBudget - used);
|
|
32
|
-
lines.push(
|
|
33
|
-
`Token Budget: ${tokenBudget}. Using ${used}. ${remaining} remaining. Promote relevant entries with <get/> to spend. Demote irrelevant entries with <set fidelity="demoted"/> to save.`,
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
lines.push(
|
|
37
|
-
"Conclude with a brief <update></update> to continue or a brief <summarize></summarize> if done.",
|
|
38
|
-
);
|
|
39
|
-
const body = lines.join("\n");
|
|
40
|
-
|
|
41
|
-
return `${content}<progress turn="${ctx.turn}">${body}</progress>\n`;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# summarize
|
|
2
|
-
|
|
3
|
-
Lifecycle signal — the model declares it has completed the task.
|
|
4
|
-
|
|
5
|
-
## Registration
|
|
6
|
-
|
|
7
|
-
- **Tool**: `summarize`
|
|
8
|
-
- **Category**: `logging`
|
|
9
|
-
- **Handler**: None — recorded by TurnExecutor as a lifecycle signal.
|
|
10
|
-
|
|
11
|
-
## Projection
|
|
12
|
-
|
|
13
|
-
Shows `summarize` followed by the entry body.
|
|
14
|
-
|
|
15
|
-
## Behavior
|
|
16
|
-
|
|
17
|
-
If the model sends `<summarize>` but actions in the same turn failed,
|
|
18
|
-
TurnExecutor overrides it to `<update>` — the model's assertion that
|
|
19
|
-
it's done is false.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import docs from "./summarizeDoc.js";
|
|
2
|
-
|
|
3
|
-
export default class Summarize {
|
|
4
|
-
#core;
|
|
5
|
-
|
|
6
|
-
constructor(core) {
|
|
7
|
-
this.#core = core;
|
|
8
|
-
core.ensureTool();
|
|
9
|
-
core.registerScheme({ category: "logging" });
|
|
10
|
-
core.on("handler", this.handler.bind(this));
|
|
11
|
-
core.on("promoted", this.full.bind(this));
|
|
12
|
-
core.on("demoted", this.summary.bind(this));
|
|
13
|
-
core.filter("instructions.toolDocs", async (docsMap) => {
|
|
14
|
-
docsMap.summarize = docs;
|
|
15
|
-
return docsMap;
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async handler(entry, rummy) {
|
|
20
|
-
const { entries: store, sequence: turn, runId, loopId } = rummy;
|
|
21
|
-
const statusPath = await store.slugPath(runId, "summarize", entry.body);
|
|
22
|
-
await store.upsert(runId, turn, statusPath, entry.body, 200, { loopId });
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
full(entry) {
|
|
26
|
-
return `# summarize\n${entry.body}`;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
summary(entry) {
|
|
30
|
-
return this.full(entry);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// Tool doc for <summarize>. Each entry: [text, rationale].
|
|
2
|
-
// Text goes to the model. Rationale stays in source.
|
|
3
|
-
// Changing ANY line requires reading ALL rationales first.
|
|
4
|
-
const LINES = [
|
|
5
|
-
[
|
|
6
|
-
"## <summarize>[answer or final summary]</summarize> - Terminate the run with the final answer",
|
|
7
|
-
"Header teaches consequence (run ends), not just label. Model now knows emitting this stops everything.",
|
|
8
|
-
],
|
|
9
|
-
[
|
|
10
|
-
"Example: <summarize>The port is 8080</summarize>",
|
|
11
|
-
"Direct answer. Summarize delivers answers.",
|
|
12
|
-
],
|
|
13
|
-
[
|
|
14
|
-
"* Urgent: <summarize></summarize> ENDS THE RUN. After this, no more turns happen.",
|
|
15
|
-
"Direct statement of terminal behavior — the model treating summarize as a generic 'done message' was causing zombie-update loops (model unsure if truly finished, defaulted to update).",
|
|
16
|
-
],
|
|
17
|
-
[
|
|
18
|
-
"* Urgent: YOU MUST NOT include <summarize></summarize> with other tools. Termination is a deliberate, isolated act — not a side effect of a turn doing other things.",
|
|
19
|
-
"Prior 'they might fail' rationale was argued around (when set on known:// succeeds, model rationalized bundling). Reframing as architectural ('termination is deliberate') removes the argument surface.",
|
|
20
|
-
],
|
|
21
|
-
[
|
|
22
|
-
"* YOU MUST keep <summarize></summarize> to <= 80 characters",
|
|
23
|
-
"Length cap.",
|
|
24
|
-
],
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
export default LINES.map(([text]) => text).join("\n");
|