@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/adapters/redis-memory.d.ts +3 -0
  3. package/dist/adapters/redis-memory.d.ts.map +1 -1
  4. package/dist/adapters/redis-memory.js +6 -0
  5. package/dist/adapters/redis-memory.js.map +1 -1
  6. package/dist/adapters/redis-types.d.ts +2 -0
  7. package/dist/adapters/redis-types.d.ts.map +1 -1
  8. package/dist/brain/anthropic.d.ts.map +1 -1
  9. package/dist/brain/anthropic.js +3 -2
  10. package/dist/brain/anthropic.js.map +1 -1
  11. package/dist/brain/gemini.d.ts.map +1 -1
  12. package/dist/brain/gemini.js +2 -1
  13. package/dist/brain/gemini.js.map +1 -1
  14. package/dist/brain/ollama.d.ts.map +1 -1
  15. package/dist/brain/ollama.js +3 -2
  16. package/dist/brain/ollama.js.map +1 -1
  17. package/dist/brain/openai.d.ts.map +1 -1
  18. package/dist/brain/openai.js +2 -1
  19. package/dist/brain/openai.js.map +1 -1
  20. package/dist/brain/retry.d.ts +21 -0
  21. package/dist/brain/retry.d.ts.map +1 -0
  22. package/dist/brain/retry.js +63 -0
  23. package/dist/brain/retry.js.map +1 -0
  24. package/dist/core/loop.d.ts.map +1 -1
  25. package/dist/core/loop.js +98 -36
  26. package/dist/core/loop.js.map +1 -1
  27. package/dist/core/types.d.ts +8 -4
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/definition/parser.d.ts.map +1 -1
  30. package/dist/definition/parser.js +5 -2
  31. package/dist/definition/parser.js.map +1 -1
  32. package/dist/server.d.ts +24 -1
  33. package/dist/server.d.ts.map +1 -1
  34. package/dist/server.js +90 -25
  35. package/dist/server.js.map +1 -1
  36. package/dist/tools/dedup.d.ts +7 -2
  37. package/dist/tools/dedup.d.ts.map +1 -1
  38. package/dist/tools/dedup.js +9 -9
  39. package/dist/tools/dedup.js.map +1 -1
  40. package/dist/tools/executor.d.ts +4 -2
  41. package/dist/tools/executor.d.ts.map +1 -1
  42. package/dist/tools/executor.js +47 -13
  43. package/dist/tools/executor.js.map +1 -1
  44. package/package.json +2 -2
@@ -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. Dedupreturn cached result if same args seen in last 5 min
7
- * 3. onBeforeTool hook caller can substitute or skip execution
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: Dedup check
24
- const hash = hashToolCall(tool.name, params);
25
- const dedupKey = toolDedupKey(opts.redisPrefix, meta.sessionId);
26
- const cached = await checkDedup(opts.redis, dedupKey, hash);
27
- if (cached) {
28
- return { result: cached, cached: true, durationMs: Date.now() - start };
29
- }
30
- // Step 3: onBeforeTool hook approval gate, audit, dry-run, etc.
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(() => "proceed");
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 to Step 4
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":"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"}
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.3.2",
4
- "description": "Portable AI agent execution loop \u2014 brain-agnostic, zero embedded databases",
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",