@msm-core/mini 0.3.2 → 0.4.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/CHANGELOG.md +49 -0
- package/dist/adapters/redis-memory.d.ts +3 -0
- package/dist/adapters/redis-memory.d.ts.map +1 -1
- package/dist/adapters/redis-memory.js +6 -0
- package/dist/adapters/redis-memory.js.map +1 -1
- package/dist/adapters/redis-types.d.ts +2 -0
- package/dist/adapters/redis-types.d.ts.map +1 -1
- package/dist/brain/anthropic.d.ts.map +1 -1
- package/dist/brain/anthropic.js +3 -2
- package/dist/brain/anthropic.js.map +1 -1
- package/dist/brain/gemini.d.ts.map +1 -1
- package/dist/brain/gemini.js +2 -1
- package/dist/brain/gemini.js.map +1 -1
- package/dist/brain/ollama.d.ts.map +1 -1
- package/dist/brain/ollama.js +3 -2
- package/dist/brain/ollama.js.map +1 -1
- package/dist/brain/openai.d.ts.map +1 -1
- package/dist/brain/openai.js +2 -1
- package/dist/brain/openai.js.map +1 -1
- package/dist/brain/retry.d.ts +21 -0
- package/dist/brain/retry.d.ts.map +1 -0
- package/dist/brain/retry.js +63 -0
- package/dist/brain/retry.js.map +1 -0
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +98 -36
- package/dist/core/loop.js.map +1 -1
- package/dist/core/types.d.ts +8 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/definition/parser.d.ts.map +1 -1
- package/dist/definition/parser.js +5 -2
- package/dist/definition/parser.js.map +1 -1
- package/dist/server.d.ts +24 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +90 -25
- package/dist/server.js.map +1 -1
- package/dist/tools/dedup.d.ts +7 -2
- package/dist/tools/dedup.d.ts.map +1 -1
- package/dist/tools/dedup.js +9 -9
- package/dist/tools/dedup.js.map +1 -1
- package/dist/tools/executor.d.ts +4 -2
- package/dist/tools/executor.d.ts.map +1 -1
- package/dist/tools/executor.js +47 -13
- package/dist/tools/executor.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/executor.js
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pipeline per tool call:
|
|
5
5
|
* 1. Validate — check required parameters are present and typed
|
|
6
|
-
* 2.
|
|
7
|
-
*
|
|
6
|
+
* 2. onBeforeTool hook — approval gate / audit / substitute / skip.
|
|
7
|
+
* Runs BEFORE dedup so cached results can never bypass the gate.
|
|
8
|
+
* requiresApproval tools fail closed (hook error or no hook → blocked).
|
|
9
|
+
* 3. Dedup — return cached result if same args seen in last 5 min
|
|
8
10
|
* 4. Execute — call tool.execute()
|
|
9
11
|
* 5. Cache — store result in dedup hash
|
|
10
12
|
*/
|
|
@@ -20,19 +22,31 @@ export async function executeTool(tool, params, meta, opts) {
|
|
|
20
22
|
durationMs: Date.now() - start,
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
|
-
// Step 2:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
// Errors in the hook are caught and treated as "proceed" (safe default).
|
|
25
|
+
// Step 2: onBeforeTool hook — approval gate, audit, dry-run, etc.
|
|
26
|
+
// Runs BEFORE the dedup check so every call (including ones that would be
|
|
27
|
+
// served from cache) passes the gate — an approval/audit hook must never be
|
|
28
|
+
// bypassed by a cached result.
|
|
29
|
+
//
|
|
30
|
+
// Failure semantics: a throwing hook is "proceed" for ordinary tools, but
|
|
31
|
+
// FAIL-CLOSED for tools marked requiresApproval — if the approval system
|
|
32
|
+
// errors, a destructive tool must not run.
|
|
32
33
|
if (opts.hooks?.onBeforeTool) {
|
|
33
34
|
const directive = await opts.hooks
|
|
34
35
|
.onBeforeTool(tool.name, params, meta)
|
|
35
|
-
.catch(() =>
|
|
36
|
+
.catch(() => tool.requiresApproval
|
|
37
|
+
? { approvalFailed: true }
|
|
38
|
+
: "proceed");
|
|
39
|
+
if (typeof directive === "object" && "approvalFailed" in directive) {
|
|
40
|
+
return {
|
|
41
|
+
result: {
|
|
42
|
+
tool: tool.name,
|
|
43
|
+
status: "failed",
|
|
44
|
+
error: `Tool "${tool.name}" requires approval and the approval hook failed — execution blocked`,
|
|
45
|
+
},
|
|
46
|
+
cached: false,
|
|
47
|
+
durationMs: Date.now() - start,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
36
50
|
if (directive === "skip") {
|
|
37
51
|
return {
|
|
38
52
|
result: { tool: tool.name, status: "ok", result: { skipped: true } },
|
|
@@ -47,7 +61,27 @@ export async function executeTool(tool, params, meta, opts) {
|
|
|
47
61
|
durationMs: Date.now() - start,
|
|
48
62
|
};
|
|
49
63
|
}
|
|
50
|
-
// "proceed" — fall through
|
|
64
|
+
// "proceed" — fall through
|
|
65
|
+
}
|
|
66
|
+
else if (tool.requiresApproval) {
|
|
67
|
+
// requiresApproval is a contract, not decoration: with no approval hook
|
|
68
|
+
// configured the tool must not execute.
|
|
69
|
+
return {
|
|
70
|
+
result: {
|
|
71
|
+
tool: tool.name,
|
|
72
|
+
status: "failed",
|
|
73
|
+
error: `Tool "${tool.name}" requires approval but no onBeforeTool hook is configured`,
|
|
74
|
+
},
|
|
75
|
+
cached: false,
|
|
76
|
+
durationMs: Date.now() - start,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Step 3: Dedup check
|
|
80
|
+
const hash = hashToolCall(tool.name, params);
|
|
81
|
+
const dedupKey = toolDedupKey(opts.redisPrefix, meta.sessionId);
|
|
82
|
+
const cached = await checkDedup(opts.redis, dedupKey, hash);
|
|
83
|
+
if (cached) {
|
|
84
|
+
return { result: cached, cached: true, durationMs: Date.now() - start };
|
|
51
85
|
}
|
|
52
86
|
// Step 4: Execute
|
|
53
87
|
let result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/tools/executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/tools/executor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@msm-core/mini",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Portable AI agent execution loop
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Portable AI agent execution loop — brain-agnostic, zero embedded databases",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|