@zhixuan92/multi-model-agent-core 3.6.4 → 3.6.5

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/README.md CHANGED
@@ -18,18 +18,22 @@ Requires Node >= 22. ESM only.
18
18
  import { loadConfigFromFile } from '@zhixuan92/multi-model-agent-core/config/load';
19
19
  import { runTasks } from '@zhixuan92/multi-model-agent-core/run-tasks';
20
20
 
21
+ // Uses the same ~/.multi-model/config.json as the standalone daemon —
22
+ // agents.standard, agents.complex, defaults.parentModel, etc.
21
23
  const config = await loadConfigFromFile();
22
24
 
23
25
  const results = await runTasks([
24
- { prompt: 'Refactor auth.ts to use JWT.', agentType: 'complex' },
25
- { prompt: 'Write unit tests for auth module.', agentType: 'standard' },
26
+ { prompt: 'Refactor auth.ts to use JWT.', agentType: 'complex' },
27
+ { prompt: 'Write unit tests for auth module.', agentType: 'standard' },
26
28
  ], config);
27
29
 
28
30
  for (const r of results) {
29
- console.log(r.status, r.usage.costUSD, r.output);
31
+ console.log(r.status, r.usage.costUSD, r.savedCostUSD, r.output);
30
32
  }
31
33
  ```
32
34
 
35
+ `savedCostUSD` is populated when `defaults.parentModel` is set in the config — it's the difference between the agent's actual cost and what the parent model would have charged for the same input/output token count. Use it to surface a `$X saved (Y× ROI)` figure in your own UI.
36
+
33
37
  ## What's inside
34
38
 
35
39
  - **Provider runners** — Claude, Codex, and any OpenAI-compatible endpoint
@@ -64,6 +68,9 @@ for (const r of results) {
64
68
  | `./reporting/parse-investigation-report` | `parseInvestigationReport`, `parseCitations`, `parseConfidence` (3.4.0) |
65
69
  | `./auto-commit` | `autoCommitFiles` — git commit helper for worker file changes |
66
70
  | `./file-artifact-check` | `partitionFilePaths`, `checkOutputTargets` — output target verification |
71
+ | `./telemetry/types` | `TelemetryEvent`, `UploadBatch`, `InstallMetadata` Zod schemas + `SCHEMA_VERSION` |
72
+ | `./telemetry/event-builder` | `buildTaskCompletedEvent`, `buildSessionStartedEvent`, etc. — pure event constructors |
73
+ | `./telemetry/consent-rules` | `decideConsent` — env / config / default precedence resolver |
67
74
 
68
75
  ## Diagnostic logging
69
76
 
@@ -1 +1 @@
1
- {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/intake/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BlE,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,oBAAoB,CAmGpE"}
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/intake/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BlE,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,oBAAoB,CAqGpE"}
@@ -78,23 +78,25 @@ export function classifyDraft(draft) {
78
78
  break;
79
79
  }
80
80
  }
81
- if (!draft.filePaths?.length) {
82
- const multiScopeSignals = [
83
- /\band\b.*\b(module|service|component|system|layer)/i,
84
- /\b(modules|services|components|systems|layers)\b/i,
85
- ];
86
- for (const pattern of multiScopeSignals) {
87
- if (pattern.test(draft.prompt)) {
88
- reasons.push('multiple plausible scopes detected');
89
- break;
90
- }
91
- }
92
- }
93
- const behaviorChange = /\b(delete|remove|drop|migrate|deploy|push|publish|send)\b/i;
94
- const securitySensitive = /\b(auth|credential|secret|token|permission|password|key)\b/i;
95
- if (behaviorChange.test(draft.prompt) && !draft.filePaths?.length) {
81
+ // Behavior-change detection requires a dangerous *combination* (verb +
82
+ // dangerous object/target), not a bare verb. The earlier broad pattern
83
+ // (`delete|remove|drop|migrate|deploy|push|publish|send` alone) flagged
84
+ // ordinary technical English ("send a request", "publish docs") and
85
+ // wedged users in awaiting_clarification with no real safety win.
86
+ const dangerousCombos = [
87
+ /\brm\s+-rf?\b/i,
88
+ /\bdrop\s+(?:the\s+)?(?:\w+\s+)?(?:table|database|schema|index)\b/i,
89
+ /\b(?:delete|truncate)\s+(?:the\s+)?(?:table|database|schema|all|every|everything|users|accounts|files?\b|directory|directories|repo)\b/i,
90
+ /\b(?:deploy|publish|release)\s+(?:to\s+)?(?:production|prod|staging|live|main|master)\b/i,
91
+ /\b(?:force[-\s]push|push\s+--force)\b/i,
92
+ /\bpush\s+(?:to\s+)?(?:main|master|origin\/(?:main|master))\b/i,
93
+ /\bmigrate\s+(?:the\s+)?(?:production|prod|live|database|schema)\b/i,
94
+ ];
95
+ const matchedDangerous = dangerousCombos.some(pat => pat.test(draft.prompt));
96
+ if (matchedDangerous && !draft.filePaths?.length) {
96
97
  reasons.push('behavior-changing task without explicit scope');
97
98
  }
99
+ const securitySensitive = /\b(auth|credential|secret|token|permission|password|key)\b/i;
98
100
  if (securitySensitive.test(draft.prompt) && !draft.done) {
99
101
  reasons.push('security-sensitive task without explicit done condition');
100
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/intake/classify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/intake/classify.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhixuan92/multi-model-agent-core",
3
- "version": "3.6.4",
3
+ "version": "3.6.5",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Core library for multi-model-agent: provider runners (Claude, Codex, OpenAI-compatible), routing logic, config schema, and tool/sandbox primitives.",