fivocell 4.4.1 → 4.6.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 (83) hide show
  1. package/dist/__tests__/context-ranker.test.d.ts +2 -0
  2. package/dist/__tests__/context-ranker.test.d.ts.map +1 -0
  3. package/dist/__tests__/context-ranker.test.js +61 -0
  4. package/dist/__tests__/context-ranker.test.js.map +1 -0
  5. package/dist/__tests__/handoff-store.test.d.ts +2 -0
  6. package/dist/__tests__/handoff-store.test.d.ts.map +1 -0
  7. package/dist/__tests__/handoff-store.test.js +151 -0
  8. package/dist/__tests__/handoff-store.test.js.map +1 -0
  9. package/dist/__tests__/memory-archive.test.d.ts +2 -0
  10. package/dist/__tests__/memory-archive.test.d.ts.map +1 -0
  11. package/dist/__tests__/memory-archive.test.js +114 -0
  12. package/dist/__tests__/memory-archive.test.js.map +1 -0
  13. package/dist/__tests__/memory-compact.test.d.ts +2 -0
  14. package/dist/__tests__/memory-compact.test.d.ts.map +1 -0
  15. package/dist/__tests__/memory-compact.test.js +43 -0
  16. package/dist/__tests__/memory-compact.test.js.map +1 -0
  17. package/dist/__tests__/memory-event-store.test.d.ts +2 -0
  18. package/dist/__tests__/memory-event-store.test.d.ts.map +1 -0
  19. package/dist/__tests__/memory-event-store.test.js +101 -0
  20. package/dist/__tests__/memory-event-store.test.js.map +1 -0
  21. package/dist/__tests__/redactor.test.d.ts +2 -0
  22. package/dist/__tests__/redactor.test.d.ts.map +1 -0
  23. package/dist/__tests__/redactor.test.js +89 -0
  24. package/dist/__tests__/redactor.test.js.map +1 -0
  25. package/dist/__tests__/style-memory.test.d.ts +2 -0
  26. package/dist/__tests__/style-memory.test.d.ts.map +1 -0
  27. package/dist/__tests__/style-memory.test.js +134 -0
  28. package/dist/__tests__/style-memory.test.js.map +1 -0
  29. package/dist/__tests__/summary-generator.test.d.ts +2 -0
  30. package/dist/__tests__/summary-generator.test.d.ts.map +1 -0
  31. package/dist/__tests__/summary-generator.test.js +53 -0
  32. package/dist/__tests__/summary-generator.test.js.map +1 -0
  33. package/dist/walls/01-context/context/prompt-builder.d.ts +7 -0
  34. package/dist/walls/01-context/context/prompt-builder.d.ts.map +1 -1
  35. package/dist/walls/01-context/context/prompt-builder.js +29 -0
  36. package/dist/walls/01-context/context/prompt-builder.js.map +1 -1
  37. package/dist/walls/06-memory/archive/memory-archive.d.ts +20 -0
  38. package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -0
  39. package/dist/walls/06-memory/archive/memory-archive.js +201 -0
  40. package/dist/walls/06-memory/archive/memory-archive.js.map +1 -0
  41. package/dist/walls/06-memory/archive/memory-compact.d.ts +17 -0
  42. package/dist/walls/06-memory/archive/memory-compact.d.ts.map +1 -0
  43. package/dist/walls/06-memory/archive/memory-compact.js +128 -0
  44. package/dist/walls/06-memory/archive/memory-compact.js.map +1 -0
  45. package/dist/walls/06-memory/database/database.d.ts.map +1 -1
  46. package/dist/walls/06-memory/database/database.js +100 -0
  47. package/dist/walls/06-memory/database/database.js.map +1 -1
  48. package/dist/walls/06-memory/handoff/handoff-store.d.ts +31 -0
  49. package/dist/walls/06-memory/handoff/handoff-store.d.ts.map +1 -0
  50. package/dist/walls/06-memory/handoff/handoff-store.js +203 -0
  51. package/dist/walls/06-memory/handoff/handoff-store.js.map +1 -0
  52. package/dist/walls/06-memory/privacy/redactor.d.ts +14 -0
  53. package/dist/walls/06-memory/privacy/redactor.d.ts.map +1 -0
  54. package/dist/walls/06-memory/privacy/redactor.js +110 -0
  55. package/dist/walls/06-memory/privacy/redactor.js.map +1 -0
  56. package/dist/walls/06-memory/stores/context-ranker.d.ts +21 -0
  57. package/dist/walls/06-memory/stores/context-ranker.d.ts.map +1 -0
  58. package/dist/walls/06-memory/stores/context-ranker.js +84 -0
  59. package/dist/walls/06-memory/stores/context-ranker.js.map +1 -0
  60. package/dist/walls/06-memory/stores/memory-event-store.d.ts +43 -0
  61. package/dist/walls/06-memory/stores/memory-event-store.d.ts.map +1 -0
  62. package/dist/walls/06-memory/stores/memory-event-store.js +139 -0
  63. package/dist/walls/06-memory/stores/memory-event-store.js.map +1 -0
  64. package/dist/walls/06-memory/stores/summary-generator.d.ts +16 -0
  65. package/dist/walls/06-memory/stores/summary-generator.d.ts.map +1 -0
  66. package/dist/walls/06-memory/stores/summary-generator.js +151 -0
  67. package/dist/walls/06-memory/stores/summary-generator.js.map +1 -0
  68. package/dist/walls/06-memory/style/style-memory.d.ts +39 -0
  69. package/dist/walls/06-memory/style/style-memory.d.ts.map +1 -0
  70. package/dist/walls/06-memory/style/style-memory.js +186 -0
  71. package/dist/walls/06-memory/style/style-memory.js.map +1 -0
  72. package/dist/walls/07-runtime/cli/cli.js +350 -0
  73. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  74. package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
  75. package/dist/walls/07-runtime/daemon/server.js +99 -0
  76. package/dist/walls/07-runtime/daemon/server.js.map +1 -1
  77. package/dist/walls/07-runtime/setup/setup.d.ts.map +1 -1
  78. package/dist/walls/07-runtime/setup/setup.js +35 -0
  79. package/dist/walls/07-runtime/setup/setup.js.map +1 -1
  80. package/dist/walls/07-runtime/watcher/live-watcher.d.ts.map +1 -1
  81. package/dist/walls/07-runtime/watcher/live-watcher.js +32 -0
  82. package/dist/walls/07-runtime/watcher/live-watcher.js.map +1 -1
  83. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/walls/07-runtime/daemon/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA0F3D,QAAA,MAAM,GAAG,6CAAY,CAAC;AAQtB,QAAA,MAAM,OAAO;;;mBAMuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EhD,CAAC;AA+pKF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/walls/07-runtime/daemon/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA0F3D,QAAA,MAAM,GAAG,6CAAY,CAAC;AAQtB,QAAA,MAAM,OAAO;;;mBAMuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EhD,CAAC;AAi2KF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
@@ -1760,6 +1760,18 @@ const MCP_TOOLS = [
1760
1760
  { name: 'cell_predict', description: 'Predictive intelligence — repeat mistakes, decision regret, energy warnings, complexity traps', inputSchema: { type: 'object', properties: { project: { type: 'string' } }, required: [] } },
1761
1761
  { 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'] } },
1762
1762
  { name: 'cell_model_recommend', description: 'Get AI model recommendations — which tool works best for which task', inputSchema: { type: 'object', properties: {} } },
1763
+ { name: 'cell_handoff_current', description: 'Get current handoff context (max 200 lines, auto-rotation)', inputSchema: { type: 'object', properties: { project: { type: 'string' } } } },
1764
+ { name: 'cell_handoff_log', description: 'Log a handoff entry with title, summary, status', inputSchema: { type: 'object', properties: { project: { type: 'string' }, title: { type: 'string' }, summary: { type: 'string' }, status: { type: 'string', enum: ['done', 'in-progress', 'blocked', 'pending'] }, filesChanged: { type: 'array', items: { type: 'string' } }, why: { type: 'string' }, nextSteps: { type: 'string' } }, required: ['title', 'summary', 'status'] } },
1765
+ { name: 'cell_handoff_history', description: 'Get handoff history for a month (YYYY-MM)', inputSchema: { type: 'object', properties: { project: { type: 'string' }, month: { type: 'string' } } } },
1766
+ { name: 'cell_memory_search', description: 'Search memory events by query (summary, topic, details)', inputSchema: { type: 'object', properties: { project: { type: 'string' }, query: { type: 'string' }, limit: { type: 'number' } }, required: ['query'] } },
1767
+ { name: 'cell_memory_stats', description: 'Get memory event statistics (total, by type, avg importance)', inputSchema: { type: 'object', properties: { project: { type: 'string' } } } },
1768
+ { name: 'cell_memory_timeline', description: 'Get memory activity timeline (grouped by day)', inputSchema: { type: 'object', properties: { project: { type: 'string' }, days: { type: 'number' } } } },
1769
+ { name: 'cell_memory_record', description: 'Record a memory event (edit, decision, error, fix, etc.)', inputSchema: { type: 'object', properties: { project: { type: 'string' }, type: { type: 'string', enum: ['file_event', 'edit', 'decision', 'error', 'fix', 'verification', 'publish', 'handoff', 'pattern', 'style', 'session', 'branch', 'risk', 'question', 'ai_work'] }, topic: { type: 'string' }, summary: { type: 'string' }, files: { type: 'array', items: { type: 'string' } }, importance: { type: 'number' }, tool: { type: 'string' }, model: { type: 'string' } }, required: ['type', 'summary'] } },
1770
+ { name: 'cell_style_get', description: 'Get developer and project style profiles', inputSchema: { type: 'object', properties: { project: { type: 'string' } }, required: ['project'] } },
1771
+ { name: 'cell_style_update', description: 'Update developer style preference', inputSchema: { type: 'object', properties: { project: { type: 'string' }, key: { type: 'string' }, value: { type: 'string' } }, required: ['project', 'key', 'value'] } },
1772
+ { name: 'cell_memory_compact', description: 'Compact memory — merge old events and archive chunks', inputSchema: { type: 'object', properties: { project: { type: 'string' }, olderThanDays: { type: 'number' } } } },
1773
+ { name: 'cell_memory_health', description: 'Get full memory health report (events, archive, handoff)', inputSchema: { type: 'object', properties: { project: { type: 'string' } }, required: ['project'] } },
1774
+ { name: 'cell_memory_summary', description: 'Generate daily or weekly memory summary', inputSchema: { type: 'object', properties: { project: { type: 'string' }, period: { type: 'string', enum: ['daily', 'weekly'] } }, required: ['project'] } },
1763
1775
  ];
1764
1776
  async function handleMCPToolCall(name, args) {
1765
1777
  try {
@@ -2771,6 +2783,93 @@ async function handleMCPToolCall(name, args) {
2771
2783
  const { getModelRecommendations } = require('../../03-knowledge/decisions/');
2772
2784
  return { recommendations: getModelRecommendations() };
2773
2785
  }
2786
+ case 'cell_handoff_current': {
2787
+ const { getCurrentHandoff, getHandoffStats } = require('../../06-memory/handoff/handoff-store');
2788
+ const projectDir = args.project || process.cwd();
2789
+ const content = getCurrentHandoff(projectDir);
2790
+ const stats = getHandoffStats(projectDir);
2791
+ return { content, stats };
2792
+ }
2793
+ case 'cell_handoff_log': {
2794
+ const { saveHandoffEntry } = require('../../06-memory/handoff/handoff-store');
2795
+ const projectDir = args.project || process.cwd();
2796
+ saveHandoffEntry(projectDir, {
2797
+ project: require('path').basename(projectDir),
2798
+ title: args.title,
2799
+ summary: args.summary,
2800
+ status: args.status || 'done',
2801
+ filesChanged: args.filesChanged,
2802
+ why: args.why,
2803
+ nextSteps: args.nextSteps,
2804
+ });
2805
+ return { logged: true, title: args.title };
2806
+ }
2807
+ case 'cell_handoff_history': {
2808
+ const { getHistoryHandoff } = require('../../06-memory/handoff/handoff-store');
2809
+ const projectDir = args.project || process.cwd();
2810
+ return { content: getHistoryHandoff(projectDir, args.month) };
2811
+ }
2812
+ case 'cell_memory_search': {
2813
+ const { searchMemoryEvents } = require('../../06-memory/stores/memory-event-store');
2814
+ const project = args.project;
2815
+ const results = searchMemoryEvents(args.query, project, args.limit || 20);
2816
+ return { results, count: results.length };
2817
+ }
2818
+ case 'cell_memory_stats': {
2819
+ const { getMemoryStats } = require('../../06-memory/stores/memory-event-store');
2820
+ return { stats: getMemoryStats(args.project) };
2821
+ }
2822
+ case 'cell_memory_timeline': {
2823
+ const { getMemoryTimeline } = require('../../06-memory/stores/memory-event-store');
2824
+ return { timeline: getMemoryTimeline(args.project, args.days || 30) };
2825
+ }
2826
+ case 'cell_memory_record': {
2827
+ const { recordMemoryEvent } = require('../../06-memory/stores/memory-event-store');
2828
+ const id = recordMemoryEvent({
2829
+ project: args.project || require('path').basename(process.cwd()),
2830
+ type: args.type,
2831
+ topic: args.topic,
2832
+ summary: args.summary,
2833
+ files: args.files,
2834
+ importance: args.importance,
2835
+ tool: args.tool,
2836
+ model: args.model,
2837
+ });
2838
+ return { recorded: true, id };
2839
+ }
2840
+ case 'cell_style_get': {
2841
+ const { getStyleProfile } = require('../../06-memory/style/style-memory');
2842
+ const projectDir = args.project || process.cwd();
2843
+ return { profile: getStyleProfile(projectDir) };
2844
+ }
2845
+ case 'cell_style_update': {
2846
+ const { updateDeveloperPreference } = require('../../06-memory/style/style-memory');
2847
+ const projectDir = args.project || process.cwd();
2848
+ updateDeveloperPreference(projectDir, args.key, args.value);
2849
+ return { updated: true, key: args.key, value: args.value };
2850
+ }
2851
+ case 'cell_memory_compact': {
2852
+ const { compactMemoryEvents, compactArchiveChunks } = require('../../06-memory/archive/memory-compact');
2853
+ const projectDir = args.project || process.cwd();
2854
+ const days = args.olderThanDays || 90;
2855
+ const eventsDeleted = compactMemoryEvents(days);
2856
+ const archiveResult = compactArchiveChunks(projectDir, days);
2857
+ return { eventsDeleted, archive: archiveResult };
2858
+ }
2859
+ case 'cell_memory_health': {
2860
+ const { getMemoryHealth } = require('../../06-memory/archive/memory-compact');
2861
+ const projectDir = args.project || process.cwd();
2862
+ return { health: getMemoryHealth(projectDir) };
2863
+ }
2864
+ case 'cell_memory_summary': {
2865
+ const { generateDailySummary, generateWeeklySummary } = require('../../06-memory/stores/summary-generator');
2866
+ const project = args.project || require('path').basename(process.cwd());
2867
+ const period = args.period || 'daily';
2868
+ const summary = period === 'weekly'
2869
+ ? generateWeeklySummary(project, args.project || process.cwd())
2870
+ : generateDailySummary(project);
2871
+ return { summary };
2872
+ }
2774
2873
  default:
2775
2874
  return { error: `unknown tool: ${name}` };
2776
2875
  }