sdlc-agent-4-enterprise-server 1.8.0 → 1.8.2

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 (51) hide show
  1. package/README.md +3 -1
  2. package/dist/modules/memory/MemoryModule.js +5 -0
  3. package/dist/modules/memory/MemoryModule.js.map +1 -1
  4. package/dist/modules/memory/__tests__/ClassifyService.test.d.ts +1 -0
  5. package/dist/modules/memory/__tests__/ClassifyService.test.js +111 -0
  6. package/dist/modules/memory/__tests__/ClassifyService.test.js.map +1 -0
  7. package/dist/modules/memory/__tests__/SmartIngest.test.d.ts +1 -0
  8. package/dist/modules/memory/__tests__/SmartIngest.test.js +230 -0
  9. package/dist/modules/memory/__tests__/SmartIngest.test.js.map +1 -0
  10. package/dist/modules/memory/definitions/index.d.ts +34 -0
  11. package/dist/modules/memory/definitions/index.js +3 -1
  12. package/dist/modules/memory/definitions/index.js.map +1 -1
  13. package/dist/modules/memory/definitions/smart-ingest.d.ts +38 -0
  14. package/dist/modules/memory/definitions/smart-ingest.js +38 -0
  15. package/dist/modules/memory/definitions/smart-ingest.js.map +1 -0
  16. package/dist/modules/memory/dispatchers/dispatcher.d.ts +3 -0
  17. package/dist/modules/memory/dispatchers/dispatcher.js +7 -0
  18. package/dist/modules/memory/dispatchers/dispatcher.js.map +1 -1
  19. package/dist/modules/memory/dispatchers/smart-ingest.d.ts +25 -0
  20. package/dist/modules/memory/dispatchers/smart-ingest.js +147 -0
  21. package/dist/modules/memory/dispatchers/smart-ingest.js.map +1 -0
  22. package/dist/modules/memory/llm/classify-service.d.ts +23 -0
  23. package/dist/modules/memory/llm/classify-service.js +54 -0
  24. package/dist/modules/memory/llm/classify-service.js.map +1 -0
  25. package/dist/modules/orchestration/McpClientManager.js +35 -4
  26. package/dist/modules/orchestration/McpClientManager.js.map +1 -1
  27. package/dist/modules/orchestration/health/HealthMonitor.js +1 -1
  28. package/dist/modules/orchestration/health/HealthMonitor.js.map +1 -1
  29. package/dist/modules/orchestration/health/__tests__/HealthMonitor.test.js +8 -3
  30. package/dist/modules/orchestration/health/__tests__/HealthMonitor.test.js.map +1 -1
  31. package/dist/modules/orchestration/types/health.d.ts +2 -0
  32. package/dist/modules/orchestration/types/health.js +12 -0
  33. package/dist/modules/orchestration/types/health.js.map +1 -1
  34. package/dist/server/routes/admin/mcp.js +6 -4
  35. package/dist/server/routes/admin/mcp.js.map +1 -1
  36. package/dist/viewer/admin/index.html +5 -4
  37. package/package.json +1 -1
  38. package/src/modules/memory/MemoryModule.ts +6 -0
  39. package/src/modules/memory/__tests__/ClassifyService.test.ts +138 -0
  40. package/src/modules/memory/__tests__/SmartIngest.test.ts +286 -0
  41. package/src/modules/memory/definitions/index.ts +3 -1
  42. package/src/modules/memory/definitions/smart-ingest.ts +38 -0
  43. package/src/modules/memory/dispatchers/dispatcher.ts +9 -0
  44. package/src/modules/memory/dispatchers/smart-ingest.ts +217 -0
  45. package/src/modules/memory/llm/classify-service.ts +69 -0
  46. package/src/modules/orchestration/McpClientManager.ts +36 -4
  47. package/src/modules/orchestration/health/HealthMonitor.ts +1 -1
  48. package/src/modules/orchestration/health/__tests__/HealthMonitor.test.ts +7 -3
  49. package/src/modules/orchestration/types/health.ts +13 -0
  50. package/src/server/routes/admin/mcp.ts +6 -4
  51. package/src/viewer/admin/index.html +5 -4
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.7.0-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.8.2-blue?style=for-the-badge" alt="Version">
10
10
  <img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
11
11
  <img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
12
12
  </p>
@@ -233,6 +233,8 @@ The embedding model is expected at `.code-intel/models/model.onnx`. Download it:
233
233
 
234
234
  | Version | Date | Ticket | Changes |
235
235
  |---------|------|--------|---------|
236
+ | 1.8.1 | 2026-07-15 | SA4E-38 | Smart KB Ingest: `mem_smart_ingest` + `mem_smart_ingest_cleanup` tools using local Ollama LLM for semantic evaluation before KB ingestion. ClassifyService + SmartIngestHandler. |
237
+ | 1.8.0 | 2026-07-15 | SA4E-36 | Multi-tenant RBAC: Project isolation via X-Project-Id header, per-user KB scoping, access group permissions, impersonation. |
236
238
  | 1.7.0 | 2026-07-15 | SA4E-37 | Health Check & Auto-Reconnect: HealthMonitor (parallel pings), ReconnectManager (exponential backoff + jitter), ConnectionStateTracker (state machine + events), TransportFactory. McpClientManager refactored as Facade. 54 unit tests. |
237
239
  | 1.6.0 | 2026-07-15 | SA4E-34 | Multi-database Support: DatabaseAdapter strategy pattern, PostgresAdapter, MysqlAdapter, MigrationService, Admin UI database tab |
238
240
  | 1.5.0 | 2026-07-13 | SA4E-125 | Pipeline Refactoring v2-v6: index-based routing, PipelineDefinition in state, sandboxed hot-swap, resolvePhaseIndex() realignment, orphan detection, skip/cancel decisions, 3-layer skip fix, Ghost Context Barrier. LangGraph restructured into core/pipeline/agents/engine/subgraphs/workflow/helpers/hooks/vscode. 13 architecture diagrams. |
@@ -17,6 +17,7 @@ import { ScopePromotionService } from './promotion/index.js';
17
17
  import { startScheduler, stopScheduler } from './evolution/Scheduler.js';
18
18
  import { TagAnalyzerService } from './llm/analyzer.js';
19
19
  import { LLMService } from './llm/LLMService.js';
20
+ import { ClassifyService } from './llm/classify-service.js';
20
21
  export class MemoryModule {
21
22
  name = 'memory';
22
23
  _status = 'initializing';
@@ -85,6 +86,10 @@ export class MemoryModule {
85
86
  const tagAnalyzer = new TagAnalyzerService(llmService, this.logger);
86
87
  this.dispatcher.setTagAnalyzer(tagAnalyzer);
87
88
  this.logger.info({ provider: llmConfig.provider, model: llmConfig.model, baseUrl: llmConfig.baseUrl }, 'TagAnalyzerService initialized — LLM auto-tagging enabled');
89
+ // Wire ClassifyService for smart ingest (SA4E-38)
90
+ const classifyService = new ClassifyService(llmService);
91
+ this.dispatcher.setClassifyService(classifyService);
92
+ this.logger.info('ClassifyService initialized — Smart KB Ingest enabled');
88
93
  }
89
94
  }
90
95
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryModule.js","sourceRoot":"","sources":["../../../src/modules/memory/MemoryModule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAEhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAQ,CAAC;IACjB,OAAO,GAAiB,cAAc,CAAC;IACvC,MAAM,CAAS;IACf,SAAS,CAAmB;IAC5B,MAAM,CAAgB;IACtB,UAAU,CAAwB;IAClC,iBAAiB,GAA0C,IAAI,CAAC;IACvD,WAAW,CAAS;IAC7B,gBAAgB,GAA4B,IAAI,CAAC;IACxC,QAAQ,CAAkB;IAE3C,YAAY,MAAc,EAAE,WAAoB,EAAE,QAAyB;QACzE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,gBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAE5B,kCAAkC;YAClC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YAClD,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YAEtD,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,6DAA6D;YAC7D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE3C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEtF,iFAAiF;YACjF,2FAA2F;YAC3F,uFAAuF;YACvF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAClG,CAAC;YAED,qCAAqC;YACrC,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxF,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAEtD,oEAAoE;YACpE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG;oBAChB,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,UAAU,CAAQ;oBACzD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU;oBAC1C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,0BAA0B;oBAC/D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS;oBAC5C,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC;oBAC7D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,EAAE,EAAE,CAAC;iBAC7D,CAAC;gBACF,yEAAyE;gBACzE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC;gBAC3E,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACnG,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;oBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,sEAAsE,CAAC,CAAC;gBACzJ,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;oBAC7C,MAAM,WAAW,GAAG,IAAI,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,2DAA2D,CAAC,CAAC;gBACtK,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,2DAA2D,CAAC,CAAC;YAC1F,CAAC;YAED,+CAA+C;YAC/C,2DAA2D;YAC3D,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAE5E,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;YAClD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;gBACxC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;wBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,mCAAmC,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,gCAAgC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAErB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,oCAAoC,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,eAAe;QACb,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEhD,KAAK,MAAM,GAAG,IAAI,uBAAuB,EAAE,CAAC;YAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACpC,IAAI,CAAC;oBACH,yEAAyE;oBACzE,MAAM,WAAW,GAAI,IAAY,CAAC,eAAe,CAAC;oBAClD,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;oBAChH,CAAC;yBAAM,CAAC;wBACN,2CAA2C;wBAC3C,MAAM,MAAM,GAAI,IAAY,CAAC,QAA8B,CAAC;wBAC5D,IAAI,MAAM,EAAE,CAAC;4BACX,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC9C,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;oBAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;oBACvF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAClB,OAAO;4BACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;4BAC9D,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBACD,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;wBACjC,OAAO,EAAE,KAAK;qBACf,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;oBAC3E,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC5D,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzC,GAAG,GAAG;YACN,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAqB,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"MemoryModule.js","sourceRoot":"","sources":["../../../src/modules/memory/MemoryModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Unit Tests — ClassifyService (SA4E-38)
3
+ * Covers: buildPrompt, parseResponse, classify, isAvailable.
4
+ */
5
+ import { describe, it, expect, vi } from 'vitest';
6
+ import { ClassifyService } from '../llm/classify-service.js';
7
+ function createMockLLMService(response, available = true) {
8
+ return {
9
+ complete: vi.fn().mockResolvedValue({ content: response, model: 'test', provider: 'ollama' }),
10
+ isAvailable: vi.fn().mockResolvedValue(available),
11
+ getConfig: vi.fn(),
12
+ ask: vi.fn(),
13
+ nameCluster: vi.fn(),
14
+ };
15
+ }
16
+ describe('ClassifyService', () => {
17
+ describe('buildPrompt', () => {
18
+ it('returns system + user messages', () => {
19
+ const llm = createMockLLMService('{}');
20
+ const svc = new ClassifyService(llm);
21
+ const messages = svc.buildPrompt('test message');
22
+ expect(messages).toHaveLength(2);
23
+ expect(messages[0].role).toBe('system');
24
+ expect(messages[1].role).toBe('user');
25
+ expect(messages[1].content).toBe('test message');
26
+ });
27
+ it('system prompt contains evaluation instructions', () => {
28
+ const llm = createMockLLMService('{}');
29
+ const svc = new ClassifyService(llm);
30
+ const messages = svc.buildPrompt('hello');
31
+ expect(messages[0].content).toContain('knowledge-base evaluator');
32
+ expect(messages[0].content).toContain('verdict');
33
+ });
34
+ });
35
+ describe('parseResponse', () => {
36
+ it('parses valid ingest response', () => {
37
+ const llm = createMockLLMService('{}');
38
+ const svc = new ClassifyService(llm);
39
+ const result = svc.parseResponse('{"verdict":"ingest","summary":"Architecture decision"}');
40
+ expect(result.verdict).toBe('ingest');
41
+ expect(result.summary).toBe('Architecture decision');
42
+ });
43
+ it('parses valid skip response', () => {
44
+ const llm = createMockLLMService('{}');
45
+ const svc = new ClassifyService(llm);
46
+ const result = svc.parseResponse('{"verdict":"skip"}');
47
+ expect(result.verdict).toBe('skip');
48
+ expect(result.summary).toBeUndefined();
49
+ });
50
+ it('extracts JSON from markdown wrapper', () => {
51
+ const llm = createMockLLMService('{}');
52
+ const svc = new ClassifyService(llm);
53
+ const result = svc.parseResponse('```json\n{"verdict":"ingest","summary":"test"}\n```');
54
+ expect(result.verdict).toBe('ingest');
55
+ expect(result.summary).toBe('test');
56
+ });
57
+ it('truncates summary to 200 chars', () => {
58
+ const llm = createMockLLMService('{}');
59
+ const svc = new ClassifyService(llm);
60
+ const longSummary = 'A'.repeat(300);
61
+ const result = svc.parseResponse(`{"verdict":"ingest","summary":"${longSummary}"}`);
62
+ expect(result.summary.length).toBe(200);
63
+ });
64
+ it('treats unknown verdict as skip', () => {
65
+ const llm = createMockLLMService('{}');
66
+ const svc = new ClassifyService(llm);
67
+ const result = svc.parseResponse('{"verdict":"unknown"}');
68
+ expect(result.verdict).toBe('skip');
69
+ });
70
+ it('returns skip when no JSON found (no braces)', () => {
71
+ const llm = createMockLLMService('{}');
72
+ const svc = new ClassifyService(llm);
73
+ const result = svc.parseResponse('I cannot help with that');
74
+ expect(result.verdict).toBe('skip');
75
+ });
76
+ it('throws on malformed JSON with braces', () => {
77
+ const llm = createMockLLMService('{}');
78
+ const svc = new ClassifyService(llm);
79
+ expect(() => svc.parseResponse('{invalid json content}'))
80
+ .toThrow('llm_parse_error');
81
+ });
82
+ });
83
+ describe('classify', () => {
84
+ it('calls LLM and returns parsed result', async () => {
85
+ const llm = createMockLLMService('{"verdict":"ingest","summary":"Important decision"}');
86
+ const svc = new ClassifyService(llm);
87
+ const result = await svc.classify('We decided to use Strategy pattern');
88
+ expect(llm.complete).toHaveBeenCalledTimes(1);
89
+ expect(result.verdict).toBe('ingest');
90
+ expect(result.summary).toBe('Important decision');
91
+ });
92
+ it('propagates parse errors', async () => {
93
+ const llm = createMockLLMService('{invalid json content}');
94
+ const svc = new ClassifyService(llm);
95
+ await expect(svc.classify('test')).rejects.toThrow('llm_parse_error');
96
+ });
97
+ });
98
+ describe('isAvailable', () => {
99
+ it('returns true when LLM is available', async () => {
100
+ const llm = createMockLLMService('{}', true);
101
+ const svc = new ClassifyService(llm);
102
+ expect(await svc.isAvailable()).toBe(true);
103
+ });
104
+ it('returns false when LLM is unavailable', async () => {
105
+ const llm = createMockLLMService('{}', false);
106
+ const svc = new ClassifyService(llm);
107
+ expect(await svc.isAvailable()).toBe(false);
108
+ });
109
+ });
110
+ });
111
+ //# sourceMappingURL=ClassifyService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClassifyService.test.js","sourceRoot":"","sources":["../../../../src/modules/memory/__tests__/ClassifyService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Unit Tests — Smart Ingest Handler (SA4E-38)
3
+ * Covers: handleSmartIngest, handleSmartIngestCleanup.
4
+ */
5
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
6
+ import Database from 'better-sqlite3';
7
+ import { MemoryEngine } from '../engine/index.js';
8
+ import { MEMORY_SCHEMA } from '../schema/index.js';
9
+ import { handleSmartIngest, handleSmartIngestCleanup } from '../dispatchers/smart-ingest.js';
10
+ function createTestDb() {
11
+ const db = new Database(':memory:');
12
+ db.pragma('journal_mode = WAL');
13
+ db.pragma('foreign_keys = ON');
14
+ db.exec(MEMORY_SCHEMA);
15
+ return db;
16
+ }
17
+ function createMockClassify(verdict, summary, available = true) {
18
+ return {
19
+ classify: vi.fn().mockResolvedValue({ verdict, summary }),
20
+ isAvailable: vi.fn().mockResolvedValue(available),
21
+ buildPrompt: vi.fn(),
22
+ parseResponse: vi.fn(),
23
+ };
24
+ }
25
+ function createUnavailableClassify() {
26
+ return {
27
+ classify: vi.fn(),
28
+ isAvailable: vi.fn().mockResolvedValue(false),
29
+ buildPrompt: vi.fn(),
30
+ parseResponse: vi.fn(),
31
+ };
32
+ }
33
+ describe('handleSmartIngest', () => {
34
+ let db;
35
+ let engine;
36
+ beforeEach(() => {
37
+ db = createTestDb();
38
+ engine = new MemoryEngine(db);
39
+ engine.startSession('test');
40
+ });
41
+ it('skips empty message', async () => {
42
+ const svc = createMockClassify('ingest', 'test');
43
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: '' }));
44
+ expect(result.action).toBe('skip');
45
+ expect(result.reason).toBe('empty_message');
46
+ });
47
+ it('skips null message', async () => {
48
+ const svc = createMockClassify('ingest', 'test');
49
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, {}));
50
+ expect(result.action).toBe('skip');
51
+ expect(result.reason).toBe('empty_message');
52
+ });
53
+ it('falls back to unfiltered when LLM unavailable', async () => {
54
+ const svc = createUnavailableClassify();
55
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'test content' }));
56
+ expect(result.action).toBe('ingest_unfiltered');
57
+ expect(result.reason).toBe('llm_unavailable');
58
+ });
59
+ it('falls back to unfiltered when classifyService is undefined', async () => {
60
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, undefined, { message: 'test content' }));
61
+ expect(result.action).toBe('ingest_unfiltered');
62
+ expect(result.reason).toBe('llm_unavailable');
63
+ });
64
+ it('ingests when LLM says ingest', async () => {
65
+ const svc = createMockClassify('ingest', 'Architecture decision: use Strategy pattern');
66
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'We decided to use Strategy' }));
67
+ expect(result.action).toBe('ingest');
68
+ expect(result.summary).toBe('Architecture decision: use Strategy pattern');
69
+ });
70
+ it('skips when LLM says skip', async () => {
71
+ const svc = createMockClassify('skip');
72
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'hello there' }));
73
+ expect(result.action).toBe('skip');
74
+ expect(result.reason).toBe('no business/technical value');
75
+ });
76
+ it('skips duplicate content', async () => {
77
+ const summary = 'Architecture decision';
78
+ // Pre-insert matching entry
79
+ engine.insert({
80
+ content: summary,
81
+ summary,
82
+ type: 'CONTEXT',
83
+ source: '/chat-prompt',
84
+ tags: 'smart-ingest',
85
+ });
86
+ const svc = createMockClassify('ingest', summary);
87
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'test' }));
88
+ expect(result.action).toBe('skip');
89
+ expect(result.reason).toBe('duplicate');
90
+ });
91
+ it('truncates message to 10000 chars', async () => {
92
+ const longMessage = 'A'.repeat(15000);
93
+ const svc = createMockClassify('ingest', 'summary');
94
+ await handleSmartIngest(engine, undefined, svc, { message: longMessage });
95
+ expect(svc.classify).toHaveBeenCalledWith('A'.repeat(10000));
96
+ });
97
+ it('falls back on parse error', async () => {
98
+ const svc = {
99
+ classify: vi.fn().mockRejectedValue(new Error('llm_parse_error')),
100
+ isAvailable: vi.fn().mockResolvedValue(true),
101
+ buildPrompt: vi.fn(),
102
+ parseResponse: vi.fn(),
103
+ };
104
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'test content' }));
105
+ expect(result.action).toBe('ingest_unfiltered');
106
+ expect(result.reason).toBe('llm_parse_error');
107
+ });
108
+ it('stores entry with correct tags on ingest', async () => {
109
+ const svc = createMockClassify('ingest', 'Important knowledge');
110
+ await handleSmartIngest(engine, { userId: 'user-1' }, svc, { message: 'test' });
111
+ const entries = db.prepare("SELECT * FROM knowledge_entries WHERE tags LIKE '%smart-ingest%'").all();
112
+ expect(entries.length).toBe(1);
113
+ expect(entries[0].tags).toContain('smart-ingest');
114
+ expect(entries[0].source).toBe('/chat-prompt');
115
+ expect(entries[0].user_id).toBe('user-1');
116
+ });
117
+ it('stores unfiltered entry with unfiltered tag', async () => {
118
+ const svc = createUnavailableClassify();
119
+ await handleSmartIngest(engine, { userId: 'user-1' }, svc, { message: 'some content' });
120
+ const entries = db.prepare("SELECT * FROM knowledge_entries WHERE tags LIKE '%unfiltered%'").all();
121
+ expect(entries.length).toBe(1);
122
+ expect(entries[0].tags).toContain('unfiltered');
123
+ });
124
+ it('never throws — returns error JSON on unexpected failure', async () => {
125
+ // Force an error by making engine.insert throw
126
+ const badEngine = { ...engine, insert: () => { throw new Error('DB error'); } };
127
+ badEngine.getDb = () => db;
128
+ const svc = createMockClassify('ingest', 'test');
129
+ const result = JSON.parse(await handleSmartIngest(badEngine, undefined, svc, { message: 'test' }));
130
+ expect(result.action).toBe('error');
131
+ expect(result.reason).toBe('ingest_failed');
132
+ });
133
+ });
134
+ describe('handleSmartIngestCleanup', () => {
135
+ let db;
136
+ let engine;
137
+ beforeEach(() => {
138
+ db = createTestDb();
139
+ engine = new MemoryEngine(db);
140
+ engine.startSession('test');
141
+ });
142
+ function seedUnfiltered(content) {
143
+ return engine.insert({
144
+ content,
145
+ summary: content.slice(0, 120),
146
+ type: 'CONTEXT',
147
+ source: '/chat-prompt',
148
+ tags: 'chat,stream,user,unfiltered',
149
+ });
150
+ }
151
+ it('returns unavailable when LLM is down', async () => {
152
+ const svc = createUnavailableClassify();
153
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
154
+ expect(result.processed).toBe(0);
155
+ expect(result.reason).toBe('llm_unavailable');
156
+ });
157
+ it('processes unfiltered entries — ingest verdict', async () => {
158
+ seedUnfiltered('Architecture decision about transport layer');
159
+ const svc = createMockClassify('ingest', 'Transport layer decision');
160
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
161
+ expect(result.processed).toBe(1);
162
+ expect(result.ingested).toBe(1);
163
+ expect(result.deleted).toBe(0);
164
+ });
165
+ it('processes unfiltered entries — skip verdict deletes', async () => {
166
+ seedUnfiltered('hello there');
167
+ const svc = createMockClassify('skip');
168
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
169
+ expect(result.processed).toBe(1);
170
+ expect(result.ingested).toBe(0);
171
+ expect(result.deleted).toBe(1);
172
+ });
173
+ it('respects batch_size parameter', async () => {
174
+ seedUnfiltered('entry 1');
175
+ seedUnfiltered('entry 2');
176
+ seedUnfiltered('entry 3');
177
+ const svc = createMockClassify('ingest', 'test');
178
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 2 }));
179
+ expect(result.processed).toBe(2);
180
+ });
181
+ it('clamps batch_size to 1-100 range', async () => {
182
+ seedUnfiltered('entry 1');
183
+ const svc = createMockClassify('ingest', 'test');
184
+ // batch_size > 100 → clamped to 100
185
+ await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 200 });
186
+ // batch_size < 1 → clamped to 1
187
+ await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 0 });
188
+ // No error — function handles gracefully
189
+ });
190
+ it('dry_run does not modify entries', async () => {
191
+ const id = seedUnfiltered('test entry');
192
+ const svc = createMockClassify('skip');
193
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, { dry_run: true }));
194
+ expect(result.processed).toBe(1);
195
+ expect(result.deleted).toBe(1);
196
+ expect(result.dry_run).toBe(true);
197
+ // Entry should still exist
198
+ const entry = engine.findById(id);
199
+ expect(entry).toBeDefined();
200
+ });
201
+ it('stops on mid-batch LLM failure', async () => {
202
+ seedUnfiltered('entry 1');
203
+ seedUnfiltered('entry 2');
204
+ let callCount = 0;
205
+ const svc = {
206
+ classify: vi.fn().mockImplementation(() => {
207
+ callCount++;
208
+ if (callCount === 2)
209
+ throw new Error('LLM timeout');
210
+ return Promise.resolve({ verdict: 'ingest', summary: 'test' });
211
+ }),
212
+ isAvailable: vi.fn().mockResolvedValue(true),
213
+ buildPrompt: vi.fn(),
214
+ parseResponse: vi.fn(),
215
+ };
216
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
217
+ expect(result.processed).toBe(1);
218
+ expect(result.reason).toBe('llm_unavailable_mid_batch');
219
+ });
220
+ it('reports correct remaining count', async () => {
221
+ seedUnfiltered('entry 1');
222
+ seedUnfiltered('entry 2');
223
+ seedUnfiltered('entry 3');
224
+ const svc = createMockClassify('skip');
225
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 2 }));
226
+ expect(result.processed).toBe(2);
227
+ expect(result.remaining).toBe(1);
228
+ });
229
+ });
230
+ //# sourceMappingURL=SmartIngest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartIngest.test.js","sourceRoot":"","sources":["../../../../src/modules/memory/__tests__/SmartIngest.test.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export { TIER1_TOOLS } from './search.js';
2
2
  export { TIER2_TOOLS } from './tier2.js';
3
3
  export { TIER3_TOOLS, MEMORY_TOOL_ALIASES } from './tier3.js';
4
4
  export { EVOLUTION_TOOLS } from './evolution.js';
5
+ export { SMART_INGEST_TOOLS } from './smart-ingest.js';
5
6
  export declare const MEMORY_TOOL_DEFINITIONS: ({
6
7
  name: string;
7
8
  description: string;
@@ -1300,4 +1301,37 @@ export declare const MEMORY_TOOL_DEFINITIONS: ({
1300
1301
  };
1301
1302
  required: string[];
1302
1303
  };
1304
+ } | {
1305
+ name: string;
1306
+ description: string;
1307
+ inputSchema: {
1308
+ type: string;
1309
+ properties: {
1310
+ message: {
1311
+ type: string;
1312
+ description: string;
1313
+ };
1314
+ batch_size?: undefined;
1315
+ dry_run?: undefined;
1316
+ };
1317
+ required: string[];
1318
+ };
1319
+ } | {
1320
+ name: string;
1321
+ description: string;
1322
+ inputSchema: {
1323
+ type: string;
1324
+ properties: {
1325
+ batch_size: {
1326
+ type: string;
1327
+ description: string;
1328
+ };
1329
+ dry_run: {
1330
+ type: string;
1331
+ description: string;
1332
+ };
1333
+ message?: undefined;
1334
+ };
1335
+ required?: undefined;
1336
+ };
1303
1337
  })[];
@@ -2,9 +2,11 @@ import { TIER1_TOOLS } from './search.js';
2
2
  import { TIER2_TOOLS } from './tier2.js';
3
3
  import { TIER3_TOOLS, MEMORY_TOOL_ALIASES } from './tier3.js';
4
4
  import { EVOLUTION_TOOLS } from './evolution.js';
5
+ import { SMART_INGEST_TOOLS } from './smart-ingest.js';
5
6
  export { TIER1_TOOLS } from './search.js';
6
7
  export { TIER2_TOOLS } from './tier2.js';
7
8
  export { TIER3_TOOLS, MEMORY_TOOL_ALIASES } from './tier3.js';
8
9
  export { EVOLUTION_TOOLS } from './evolution.js';
9
- export const MEMORY_TOOL_DEFINITIONS = [...TIER1_TOOLS, ...TIER2_TOOLS, ...TIER3_TOOLS, ...EVOLUTION_TOOLS, ...MEMORY_TOOL_ALIASES];
10
+ export { SMART_INGEST_TOOLS } from './smart-ingest.js';
11
+ export const MEMORY_TOOL_DEFINITIONS = [...TIER1_TOOLS, ...TIER2_TOOLS, ...TIER3_TOOLS, ...EVOLUTION_TOOLS, ...SMART_INGEST_TOOLS, ...MEMORY_TOOL_ALIASES];
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/memory/definitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,GAAG,eAAe,EAAE,GAAG,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/memory/definitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,GAAG,eAAe,EAAE,GAAG,kBAAkB,EAAE,GAAG,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Smart Ingest tool definitions — mem_smart_ingest + mem_smart_ingest_cleanup.
3
+ * SA4E-38: Local LLM Semantic Evaluation for KB ingestion.
4
+ */
5
+ export declare const SMART_INGEST_TOOLS: ({
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: string;
10
+ properties: {
11
+ message: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ batch_size?: undefined;
16
+ dry_run?: undefined;
17
+ };
18
+ required: string[];
19
+ };
20
+ } | {
21
+ name: string;
22
+ description: string;
23
+ inputSchema: {
24
+ type: string;
25
+ properties: {
26
+ batch_size: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ dry_run: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ message?: undefined;
35
+ };
36
+ required?: undefined;
37
+ };
38
+ })[];
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Smart Ingest tool definitions — mem_smart_ingest + mem_smart_ingest_cleanup.
3
+ * SA4E-38: Local LLM Semantic Evaluation for KB ingestion.
4
+ */
5
+ export const SMART_INGEST_TOOLS = [
6
+ {
7
+ name: 'mem_smart_ingest',
8
+ description: 'Evaluate user message via local LLM and auto-ingest if valuable. Falls back to raw ingest when LLM unavailable.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ message: {
13
+ type: 'string',
14
+ description: 'User message content to evaluate for KB value',
15
+ },
16
+ },
17
+ required: ['message'],
18
+ },
19
+ },
20
+ {
21
+ name: 'mem_smart_ingest_cleanup',
22
+ description: 'Re-evaluate unfiltered KB entries in batch using local LLM. Ingests valuable entries and deletes noise.',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ batch_size: {
27
+ type: 'number',
28
+ description: 'Max entries to process (1-100, default 50)',
29
+ },
30
+ dry_run: {
31
+ type: 'boolean',
32
+ description: 'Preview mode — no actual changes',
33
+ },
34
+ },
35
+ },
36
+ },
37
+ ];
38
+ //# sourceMappingURL=smart-ingest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-ingest.js","sourceRoot":"","sources":["../../../../src/modules/memory/definitions/smart-ingest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iHAAiH;QAC9H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,yGAAyG;QACtH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;aACF;SACF;KACF;CACF,CAAC"}
@@ -7,6 +7,7 @@ import type { QueryLayer } from '../../../engine/query/query-layer.js';
7
7
  import type { ScopeContext } from '../models.js';
8
8
  import type { ScopePromotionService } from '../promotion/service.js';
9
9
  import type { TagAnalyzerService } from '../llm/analyzer.js';
10
+ import type { ClassifyService } from '../llm/classify-service.js';
10
11
  import type { ConvertToolResolver } from '../ingest/ConvertToolResolver.js';
11
12
  type Args = Record<string, unknown>;
12
13
  export declare class MemoryToolDispatcher {
@@ -16,12 +17,14 @@ export declare class MemoryToolDispatcher {
16
17
  private scopeCtx;
17
18
  private promotionService;
18
19
  private tagAnalyzer;
20
+ private classifyService;
19
21
  private convertResolver;
20
22
  constructor(engine: MemoryEngine, workspace: string, queryLayer?: QueryLayer | undefined);
21
23
  setScopeContext(ctx: ScopeContext | undefined): void;
22
24
  setPromotionService(svc: ScopePromotionService): void;
23
25
  setTagAnalyzer(svc: TagAnalyzerService): void;
24
26
  setConvertResolver(resolver: ConvertToolResolver): void;
27
+ setClassifyService(svc: ClassifyService): void;
25
28
  dispatch(name: string, args: Args): Promise<string | null>;
26
29
  private resolveAlias;
27
30
  }