fivocell 3.0.0 → 4.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-model-engine.d.ts","sourceRoot":"","sources":["../src/cross-model-engine.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CA2BP;AAID,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CA8BjD;AAED,wBAAgB,uBAAuB,IAAI,mBAAmB,EAAE,CAgC/D;AAED,wBAAgB,wBAAwB,IAAI,gBAAgB,CAkB3D"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recordModelInteraction = recordModelInteraction;
4
+ exports.getModelProfiles = getModelProfiles;
5
+ exports.getModelRecommendations = getModelRecommendations;
6
+ exports.generateCrossModelReport = generateCrossModelReport;
7
+ const database_1 = require("./core/database");
8
+ // ─── Engine ──────────────────────────────────────────────────────────────────
9
+ function recordModelInteraction(params) {
10
+ const db = (0, database_1.getDb)();
11
+ db.exec(`
12
+ CREATE TABLE IF NOT EXISTS model_interactions (
13
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
14
+ model_name TEXT NOT NULL,
15
+ task_type TEXT NOT NULL,
16
+ accepted INTEGER DEFAULT 0,
17
+ response_time_ms INTEGER,
18
+ project TEXT,
19
+ suggestion TEXT,
20
+ created_at TEXT DEFAULT (datetime('now'))
21
+ );
22
+ CREATE INDEX IF NOT EXISTS idx_model_interactions_model ON model_interactions(model_name, task_type);
23
+ `);
24
+ db.prepare('INSERT INTO model_interactions (model_name, task_type, accepted, response_time_ms, project, suggestion) VALUES (?, ?, ?, ?, ?, ?)').run(params.modelName, params.taskType, params.accepted ? 1 : 0, params.responseTimeMs || null, params.project || null, params.suggestion || null);
25
+ }
26
+ // ─── Analysis ────────────────────────────────────────────────────────────────
27
+ function getModelProfiles() {
28
+ const db = (0, database_1.getDb)();
29
+ const rows = db.prepare(`
30
+ SELECT model_name, task_type,
31
+ COUNT(*) as total,
32
+ SUM(accepted) as accepted,
33
+ SUM(CASE WHEN accepted = 0 THEN 1 ELSE 0 END) as rejected,
34
+ AVG(response_time_ms) as avg_time
35
+ FROM model_interactions
36
+ GROUP BY model_name, task_type
37
+ HAVING total >= 2
38
+ ORDER BY model_name, accepted DESC
39
+ `).all();
40
+ return rows.map((r) => {
41
+ const total = r.total;
42
+ const accepted = r.accepted;
43
+ const trustScore = total > 0 ? Math.round((accepted / total) * 100) : 50;
44
+ return {
45
+ modelName: r.model_name,
46
+ taskType: r.task_type,
47
+ totalCalls: total,
48
+ acceptedCount: accepted,
49
+ rejectedCount: r.rejected,
50
+ avgResponseTimeMs: Math.round(r.avg_time || 0),
51
+ trustScore,
52
+ };
53
+ });
54
+ }
55
+ function getModelRecommendations() {
56
+ const profiles = getModelProfiles();
57
+ const byTask = new Map();
58
+ for (const p of profiles) {
59
+ const list = byTask.get(p.taskType) || [];
60
+ list.push(p);
61
+ byTask.set(p.taskType, list);
62
+ }
63
+ const recommendations = [];
64
+ for (const [taskType, models] of byTask) {
65
+ models.sort((a, b) => b.trustScore - a.trustScore);
66
+ const best = models[0];
67
+ const alternatives = models.slice(1, 3).map(m => ({ model: m.modelName, trustScore: m.trustScore }));
68
+ let reason = '';
69
+ if (best.trustScore >= 90)
70
+ reason = `"${best.modelName}" consistently delivers — ${best.acceptedCount}/${best.totalCalls} accepted.`;
71
+ else if (best.trustScore >= 70)
72
+ reason = `"${best.modelName}" works well — ${best.trustScore}/100 trust. ${alternatives.length > 0 ? `Better than ${alternatives.map(a => a.model).join(', ')}.` : ''}`;
73
+ else
74
+ reason = `Mixed results (${best.trustScore}/100). Try different tool for this task.`;
75
+ recommendations.push({
76
+ taskType,
77
+ bestModel: best.modelName,
78
+ trustScore: best.trustScore,
79
+ reason,
80
+ alternatives,
81
+ });
82
+ }
83
+ return recommendations;
84
+ }
85
+ function generateCrossModelReport() {
86
+ const profiles = getModelProfiles();
87
+ const recommendations = getModelRecommendations();
88
+ const topModel = profiles.reduce((best, p) => p.trustScore > (best?.trustScore || 0) ? p : best, profiles[0]);
89
+ const total = profiles.reduce((s, p) => s + p.totalCalls, 0);
90
+ return {
91
+ profiles: profiles.sort((a, b) => b.trustScore - a.trustScore).slice(0, 20),
92
+ recommendations: recommendations.slice(0, 10),
93
+ bestOverall: topModel?.modelName || 'unknown',
94
+ totalInteractions: total,
95
+ generatedAt: new Date().toISOString(),
96
+ };
97
+ }
98
+ //# sourceMappingURL=cross-model-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-model-engine.js","sourceRoot":"","sources":["../src/cross-model-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgDrD,QAAA,MAAM,GAAG,6CAAY,CAAC;AAGtB,QAAA,MAAM,OAAO;;;mBAGuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqChD,CAAC;AAurDF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgDrD,QAAA,MAAM,GAAG,6CAAY,CAAC;AAGtB,QAAA,MAAM,OAAO;;;mBAGuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqChD,CAAC;AA0tDF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
@@ -285,6 +285,23 @@ app.post('/signal', (req, res) => {
285
285
  return;
286
286
  }
287
287
  // ─── IDE Signals ──────────────────────────────────────────────
288
+ if (type === 'model_use') {
289
+ // Track AI model interaction
290
+ try {
291
+ const { recordModelInteraction } = require('../cross-model-engine');
292
+ recordModelInteraction({
293
+ modelName: req.body.modelName || 'unknown',
294
+ taskType: req.body.taskType || req.body.type || 'general',
295
+ accepted: req.body.accepted !== false,
296
+ responseTimeMs: req.body.responseTimeMs,
297
+ project,
298
+ suggestion: req.body.suggestion,
299
+ });
300
+ }
301
+ catch { }
302
+ res.json({ recorded: true });
303
+ return;
304
+ }
288
305
  if (type === 'tab_switch' || type === 'focus_block' || type === 'file_save') {
289
306
  try {
290
307
  const db = (0, database_1.getDb)();
@@ -1729,6 +1746,8 @@ const MCP_TOOLS = [
1729
1746
  { name: 'cell_log_stuck', description: 'Log when stuck', inputSchema: { type: 'object', properties: { project: { type: 'string' }, file: { type: 'string' }, description: { type: 'string' } }, required: ['description'] } },
1730
1747
  { name: 'cell_session_bridge', description: 'Cross-session memory bridge — get last session context when switching tools', inputSchema: { type: 'object', properties: { project: { type: 'string' }, tool: { type: 'string' } }, required: ['project'] } },
1731
1748
  { name: 'cell_predict', description: 'Predictive intelligence — repeat mistakes, decision regret, energy warnings, complexity traps', inputSchema: { type: 'object', properties: { project: { type: 'string' } }, required: [] } },
1749
+ { name: 'cell_model_track', description: 'Track AI model interaction — which tool was used, what task, accepted/rejected', inputSchema: { type: 'object', properties: { modelName: { type: 'string' }, taskType: { type: 'string' }, accepted: { type: 'boolean' }, responseTimeMs: { type: 'number' }, project: { type: 'string' }, suggestion: { type: 'string' } }, required: ['modelName', 'taskType', 'accepted'] } },
1750
+ { name: 'cell_model_recommend', description: 'Get AI model recommendations — which tool works best for which task', inputSchema: { type: 'object', properties: {} } },
1732
1751
  ];
1733
1752
  async function handleMCPToolCall(name, args) {
1734
1753
  switch (name) {
@@ -1847,6 +1866,22 @@ async function handleMCPToolCall(name, args) {
1847
1866
  const { generatePredictions } = require('../predictive-engine');
1848
1867
  return generatePredictions(args.project);
1849
1868
  }
1869
+ case 'cell_model_track': {
1870
+ const { recordModelInteraction } = require('../cross-model-engine');
1871
+ recordModelInteraction({
1872
+ modelName: args.modelName,
1873
+ taskType: args.taskType,
1874
+ accepted: args.accepted,
1875
+ responseTimeMs: args.responseTimeMs,
1876
+ project: args.project,
1877
+ suggestion: args.suggestion,
1878
+ });
1879
+ return { recorded: true };
1880
+ }
1881
+ case 'cell_model_recommend': {
1882
+ const { getModelRecommendations } = require('../cross-model-engine');
1883
+ return { recommendations: getModelRecommendations() };
1884
+ }
1850
1885
  default:
1851
1886
  return { error: `unknown tool: ${name}` };
1852
1887
  }