@massa-ai/core 1.17.0 → 1.19.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 (151) hide show
  1. package/dist/data/memory/observation-contract.d.ts +14 -2
  2. package/dist/data/memory/observation-contract.d.ts.map +1 -1
  3. package/dist/data/memory/observation-contract.js.map +1 -1
  4. package/dist/data/memory/observation-repository-pg.d.ts +2 -2
  5. package/dist/data/memory/observation-repository-pg.d.ts.map +1 -1
  6. package/dist/data/memory/observation-repository-pg.js.map +1 -1
  7. package/dist/kernel/sanitize/credential-scrub.d.ts +63 -0
  8. package/dist/kernel/sanitize/credential-scrub.d.ts.map +1 -0
  9. package/dist/kernel/sanitize/credential-scrub.js +119 -0
  10. package/dist/kernel/sanitize/credential-scrub.js.map +1 -0
  11. package/dist/services/cache/lru-evict.d.ts +63 -0
  12. package/dist/services/cache/lru-evict.d.ts.map +1 -0
  13. package/dist/services/cache/lru-evict.js +76 -0
  14. package/dist/services/cache/lru-evict.js.map +1 -0
  15. package/dist/services/file-read/file-content-cache.d.ts +41 -0
  16. package/dist/services/file-read/file-content-cache.d.ts.map +1 -0
  17. package/dist/services/file-read/file-content-cache.js +109 -0
  18. package/dist/services/file-read/file-content-cache.js.map +1 -0
  19. package/dist/services/file-read/file-metadata.d.ts +23 -0
  20. package/dist/services/file-read/file-metadata.d.ts.map +1 -0
  21. package/dist/services/file-read/file-metadata.js +127 -0
  22. package/dist/services/file-read/file-metadata.js.map +1 -0
  23. package/dist/services/file-read/line-range.d.ts +91 -0
  24. package/dist/services/file-read/line-range.d.ts.map +1 -0
  25. package/dist/services/file-read/line-range.js +146 -0
  26. package/dist/services/file-read/line-range.js.map +1 -0
  27. package/dist/services/file-read/path-containment.d.ts +49 -0
  28. package/dist/services/file-read/path-containment.d.ts.map +1 -0
  29. package/dist/services/file-read/path-containment.js +128 -0
  30. package/dist/services/file-read/path-containment.js.map +1 -0
  31. package/dist/services/file-read/project-root-cache.d.ts +21 -0
  32. package/dist/services/file-read/project-root-cache.d.ts.map +1 -0
  33. package/dist/services/file-read/project-root-cache.js +78 -0
  34. package/dist/services/file-read/project-root-cache.js.map +1 -0
  35. package/dist/services/file-read/read-file.service.d.ts +68 -0
  36. package/dist/services/file-read/read-file.service.d.ts.map +1 -0
  37. package/dist/services/file-read/read-file.service.js +222 -0
  38. package/dist/services/file-read/read-file.service.js.map +1 -0
  39. package/dist/services/hooks/co-retrieval-hook.js +1 -1
  40. package/dist/services/hooks/co-retrieval-hook.js.map +1 -1
  41. package/dist/services/hooks/hook-service.d.ts.map +1 -1
  42. package/dist/services/hooks/hook-service.js +14 -1
  43. package/dist/services/hooks/hook-service.js.map +1 -1
  44. package/dist/services/index.d.ts +5 -5
  45. package/dist/services/index.d.ts.map +1 -1
  46. package/dist/services/index.js +4 -4
  47. package/dist/services/index.js.map +1 -1
  48. package/dist/services/indexing/acquire-indexing-lease.d.ts +34 -0
  49. package/dist/services/indexing/acquire-indexing-lease.d.ts.map +1 -0
  50. package/dist/services/indexing/acquire-indexing-lease.js +101 -0
  51. package/dist/services/indexing/acquire-indexing-lease.js.map +1 -0
  52. package/dist/services/indexing/execute-indexing.d.ts +33 -0
  53. package/dist/services/indexing/execute-indexing.d.ts.map +1 -0
  54. package/dist/services/indexing/execute-indexing.js +136 -0
  55. package/dist/services/indexing/execute-indexing.js.map +1 -0
  56. package/dist/services/jobs/memory-consolidation-job.js +1 -1
  57. package/dist/services/jobs/memory-consolidation-job.js.map +1 -1
  58. package/dist/services/memory/memory-controller.js +1 -1
  59. package/dist/services/memory/memory-controller.js.map +1 -1
  60. package/dist/services/memory-graph/graph-queries.d.ts.map +1 -0
  61. package/dist/services/memory-graph/graph-queries.js.map +1 -0
  62. package/dist/services/memory-graph/graph-store-factory.d.ts.map +1 -0
  63. package/dist/services/memory-graph/graph-store-factory.js.map +1 -0
  64. package/dist/services/memory-graph/graph-store-pg.d.ts.map +1 -0
  65. package/dist/services/memory-graph/graph-store-pg.js.map +1 -0
  66. package/dist/services/memory-graph/index.d.ts.map +1 -0
  67. package/dist/services/memory-graph/index.js.map +1 -0
  68. package/dist/services/memory-graph/memory-graph.service.d.ts.map +1 -0
  69. package/dist/services/memory-graph/memory-graph.service.js.map +1 -0
  70. package/dist/services/memory-graph/relation-extractor.d.ts.map +1 -0
  71. package/dist/services/memory-graph/relation-extractor.js.map +1 -0
  72. package/dist/services/memory-graph/types.d.ts.map +1 -0
  73. package/dist/services/memory-graph/types.js.map +1 -0
  74. package/dist/services/project-identity/invalidator-registry.d.ts +9 -3
  75. package/dist/services/project-identity/invalidator-registry.d.ts.map +1 -1
  76. package/dist/services/project-identity/invalidator-registry.js +9 -3
  77. package/dist/services/project-identity/invalidator-registry.js.map +1 -1
  78. package/dist/services/project-identity/production-wiring.d.ts +11 -2
  79. package/dist/services/project-identity/production-wiring.d.ts.map +1 -1
  80. package/dist/services/project-identity/production-wiring.js +11 -2
  81. package/dist/services/project-identity/production-wiring.js.map +1 -1
  82. package/dist/services/project-identity/project-root-identity.d.ts +11 -0
  83. package/dist/services/project-identity/project-root-identity.d.ts.map +1 -0
  84. package/dist/services/project-identity/project-root-identity.js +51 -0
  85. package/dist/services/project-identity/project-root-identity.js.map +1 -0
  86. package/dist/services/search/file-filter-cache.d.ts +30 -1
  87. package/dist/services/search/file-filter-cache.d.ts.map +1 -1
  88. package/dist/services/search/file-filter-cache.js +32 -13
  89. package/dist/services/search/file-filter-cache.js.map +1 -1
  90. package/dist/services/search/graph-stream.js +1 -1
  91. package/dist/services/search/graph-stream.js.map +1 -1
  92. package/dist/services/symbol/symbol-graph.service.d.ts +12 -1
  93. package/dist/services/symbol/symbol-graph.service.d.ts.map +1 -1
  94. package/dist/services/symbol/symbol-graph.service.js +14 -7
  95. package/dist/services/symbol/symbol-graph.service.js.map +1 -1
  96. package/dist/services/web/web-controller.d.ts.map +1 -1
  97. package/dist/services/web/web-controller.js +6 -7
  98. package/dist/services/web/web-controller.js.map +1 -1
  99. package/dist/tools/batch_execute.d.ts +0 -3
  100. package/dist/tools/batch_execute.d.ts.map +1 -1
  101. package/dist/tools/batch_execute.js.map +1 -1
  102. package/dist/tools/compact_snapshot.d.ts.map +1 -1
  103. package/dist/tools/compact_snapshot.js +18 -7
  104. package/dist/tools/compact_snapshot.js.map +1 -1
  105. package/dist/tools/index.d.ts +1 -1
  106. package/dist/tools/index.d.ts.map +1 -1
  107. package/dist/tools/index_project.d.ts +0 -19
  108. package/dist/tools/index_project.d.ts.map +1 -1
  109. package/dist/tools/index_project.js +38 -142
  110. package/dist/tools/index_project.js.map +1 -1
  111. package/dist/tools/read_file.d.ts +9 -72
  112. package/dist/tools/read_file.d.ts.map +1 -1
  113. package/dist/tools/read_file.js +22 -487
  114. package/dist/tools/read_file.js.map +1 -1
  115. package/package.json +2 -2
  116. package/dist/data/vector/hybrid-search.d.ts +0 -71
  117. package/dist/data/vector/hybrid-search.d.ts.map +0 -1
  118. package/dist/data/vector/hybrid-search.js +0 -243
  119. package/dist/data/vector/hybrid-search.js.map +0 -1
  120. package/dist/data/vector/index.d.ts +0 -7
  121. package/dist/data/vector/index.d.ts.map +0 -1
  122. package/dist/data/vector/index.js +0 -6
  123. package/dist/data/vector/index.js.map +0 -1
  124. package/dist/services/graph/graph-queries.d.ts.map +0 -1
  125. package/dist/services/graph/graph-queries.js.map +0 -1
  126. package/dist/services/graph/graph-store-factory.d.ts.map +0 -1
  127. package/dist/services/graph/graph-store-factory.js.map +0 -1
  128. package/dist/services/graph/graph-store-pg.d.ts.map +0 -1
  129. package/dist/services/graph/graph-store-pg.js.map +0 -1
  130. package/dist/services/graph/index.d.ts.map +0 -1
  131. package/dist/services/graph/index.js.map +0 -1
  132. package/dist/services/graph/memory-graph.service.d.ts.map +0 -1
  133. package/dist/services/graph/memory-graph.service.js.map +0 -1
  134. package/dist/services/graph/relation-extractor.d.ts.map +0 -1
  135. package/dist/services/graph/relation-extractor.js.map +0 -1
  136. package/dist/services/graph/types.d.ts.map +0 -1
  137. package/dist/services/graph/types.js.map +0 -1
  138. /package/dist/services/{graph → memory-graph}/graph-queries.d.ts +0 -0
  139. /package/dist/services/{graph → memory-graph}/graph-queries.js +0 -0
  140. /package/dist/services/{graph → memory-graph}/graph-store-factory.d.ts +0 -0
  141. /package/dist/services/{graph → memory-graph}/graph-store-factory.js +0 -0
  142. /package/dist/services/{graph → memory-graph}/graph-store-pg.d.ts +0 -0
  143. /package/dist/services/{graph → memory-graph}/graph-store-pg.js +0 -0
  144. /package/dist/services/{graph → memory-graph}/index.d.ts +0 -0
  145. /package/dist/services/{graph → memory-graph}/index.js +0 -0
  146. /package/dist/services/{graph → memory-graph}/memory-graph.service.d.ts +0 -0
  147. /package/dist/services/{graph → memory-graph}/memory-graph.service.js +0 -0
  148. /package/dist/services/{graph → memory-graph}/relation-extractor.d.ts +0 -0
  149. /package/dist/services/{graph → memory-graph}/relation-extractor.js +0 -0
  150. /package/dist/services/{graph → memory-graph}/types.d.ts +0 -0
  151. /package/dist/services/{graph → memory-graph}/types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"compact_snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/compact_snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAU,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,2CAA2C,CAAC;AASnD,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,qBAAa,mBAAoB,YAAW,YAAY;IACtD,IAAI,SAAsB;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAA0B;gBAEhD,OAAO,GAAE,0BAA+B;IAIpD,WAAW,SAMgF;IAC3F,WAAW;;;;;;;;;;;;;;;;;;;;;;MAwBT;IAEI,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CA0FrD"}
1
+ {"version":3,"file":"compact_snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/compact_snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAU,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,2CAA2C,CAAC;AAUnD,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,qBAAa,mBAAoB,YAAW,YAAY;IACtD,IAAI,SAAsB;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAA0B;gBAEhD,OAAO,GAAE,0BAA+B;IAIpD,WAAW,SAMgF;IAC3F,WAAW;;;;;;;;;;;;;;;;;;;;;;MAwBT;IAEI,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CAsGrD"}
@@ -17,6 +17,7 @@ import { logger } from "@massa-ai/shared";
17
17
  import { getObservationStore, newObservationId, } from "../data/memory/observation-repository.js";
18
18
  import { getCompactionSnapshotService } from "../services/hooks/compaction-snapshot-service.js";
19
19
  import { getAttributionResolver, } from "../services/hooks/attribution-resolver.js";
20
+ import { scrubCredentials } from "../kernel/sanitize/credential-scrub.js";
20
21
  export class CompactSnapshotTool {
21
22
  name = "compact_snapshot";
22
23
  storeOverride;
@@ -74,19 +75,29 @@ export class CompactSnapshotTool {
74
75
  persistedId = newObservationId();
75
76
  try {
76
77
  const attribution = await (this.resolverOverride ?? getAttributionResolver()).resolve({ callerProjectId: projectId, sessionId, cwd });
78
+ // XP-02 boundary: this writer bypasses HookService entirely (it
79
+ // persists via `/api/v1/hook/compact-snapshot`), so it must apply
80
+ // the same scrub-before-persist boundary independently.
81
+ const scrub = scrubCredentials(JSON.stringify({
82
+ snapshot: snapshot.xml,
83
+ eventCount: snapshot.eventCount,
84
+ compactCount: snapshot.compactCount,
85
+ generatedAt: snapshot.generatedAt,
86
+ sectionCount: snapshot.sections.length,
87
+ }));
88
+ if (scrub.total > 0) {
89
+ logger.debug("compact_snapshot payload redacted before persist", {
90
+ redactions: scrub.redactions,
91
+ total: scrub.total,
92
+ });
93
+ }
77
94
  store.insert({
78
95
  id: persistedId,
79
96
  projectId: attribution.projectId,
80
97
  sessionId,
81
98
  source: "pre-compact",
82
99
  category: "compaction-snapshots",
83
- payloadJson: JSON.stringify({
84
- snapshot: snapshot.xml,
85
- eventCount: snapshot.eventCount,
86
- compactCount: snapshot.compactCount,
87
- generatedAt: snapshot.generatedAt,
88
- sectionCount: snapshot.sections.length,
89
- }),
100
+ payloadJson: scrub.sanitized,
90
101
  importance: 0.8,
91
102
  createdAt: Date.now(),
92
103
  attributionSource: attribution.source,
@@ -1 +1 @@
1
- {"version":3,"file":"compact_snapshot.js","sourceRoot":"","sources":["../../src/tools/compact_snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compact_snapshot.js","sourceRoot":"","sources":["../../src/tools/compact_snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAA8B,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EACL,sBAAsB,GAEvB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAgB1E,MAAM,OAAO,mBAAmB;IAC9B,IAAI,GAAG,kBAAkB,CAAC;IACT,aAAa,CAAoB;IACjC,gBAAgB,CAA2B;IAE5D,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3C,CAAC;IACD,WAAW,GACT,+EAA+E;QAC/E,+EAA+E;QAC/E,8EAA8E;QAC9E,4EAA4E;QAC5E,+FAA+F;QAC/F,wFAAwF,CAAC;IAC3F,WAAW,GAAG;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EACT,oFAAoF;aACvF;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,sIAAsI;aACzI;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,MAAe;QAC1B,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,MAA+B,CAAC;QAEnG,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,mBAAmB,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC7B,SAAS;gBACT,SAAS;gBACT,YAAY,EAAE,CAAC;aAChB,CAAC,CAAC;YAEH,0EAA0E;YAC1E,6DAA6D;YAC7D,IAAI,WAA+B,CAAC;YACpC,IAAI,OAAO,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACvC,WAAW,GAAG,gBAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,CACxB,IAAI,CAAC,gBAAgB,IAAI,sBAAsB,EAAE,CAClD,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC1D,gEAAgE;oBAChE,kEAAkE;oBAClE,wDAAwD;oBACxD,MAAM,KAAK,GAAG,gBAAgB,CAC5B,IAAI,CAAC,SAAS,CAAC;wBACb,QAAQ,EAAE,QAAQ,CAAC,GAAG;wBACtB,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;qBACvC,CAAC,CACH,CAAC;oBACF,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;wBACpB,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE;4BAC/D,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;yBACnB,CAAC,CAAC;oBACL,CAAC;oBACD,KAAK,CAAC,MAAM,CAAC;wBACX,EAAE,EAAE,WAAW;wBACf,SAAS,EAAE,WAAW,CAAC,SAAS;wBAChC,SAAS;wBACT,MAAM,EAAE,aAAa;wBACrB,QAAQ,EAAE,sBAAsB;wBAChC,WAAW,EAAE,KAAK,CAAC,SAAS;wBAC5B,UAAU,EAAE,GAAG;wBACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;wBACrB,iBAAiB,EAAE,WAAW,CAAC,MAAM;qBACtC,CAAC,CAAC;oBACH,uEAAuE;oBACvE,CAAC,IAAI,CAAC,gBAAgB,IAAI,sBAAsB,EAAE,CAAC,CAAC,UAAU,CAC5D,SAAS,EACT,WAAW,CAAC,SAAS,EACrB,WAAW,CAAC,MAAM,CACnB,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;wBACzC,WAAW;wBACX,SAAS;wBACT,KAAK,EAAE,QAAQ,CAAC,KAAK;qBACtB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;wBAC1D,KAAK,EAAG,CAAW,CAAC,OAAO;qBAC5B,CAAC,CAAC;oBACH,WAAW,GAAG,SAAS,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,QAAQ,EAAE,QAAQ,CAAC,GAAG;oBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,cAAc,EAAE,CAAC,CAAC,cAAc;qBACjC,CAAC,CAAC;oBACH,WAAW;oBACX,WAAW,EAAE,QAAQ,CAAC,WAAW;iBAClC;gBACD,QAAQ,EAAE;oBACR,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;iBAC5C;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAc,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wCAAyC,KAAe,CAAC,OAAO,EAAE;aAC1E,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -29,6 +29,6 @@ export type { ExecuteParams } from "./execute.js";
29
29
  export { ExecuteFileTool } from "./execute_file.js";
30
30
  export type { ExecuteFileParams } from "./execute_file.js";
31
31
  export { BatchExecuteTool } from "./batch_execute.js";
32
- export type { BatchExecuteParams, BatchCommand } from "./batch_execute.js";
32
+ export type { BatchExecuteParams } from "./batch_execute.js";
33
33
  export { FetchAndIndexTool } from "./fetch_and_index.js";
34
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -12,15 +12,6 @@
12
12
  */
13
13
  import { IToolHandler } from "@massa-ai/shared";
14
14
  import { ToolResponse } from "@massa-ai/shared";
15
- type CanonicalizePath = (projectPath: string) => Promise<string>;
16
- export declare function canonicalizeProjectRoot(projectPath: string, canonicalize?: CanonicalizePath): Promise<string>;
17
- export declare function assertProjectRootReuse(options: {
18
- projectId: string;
19
- canonicalProjectPath: string;
20
- storedProjectPath?: string | null;
21
- forceReindex: boolean;
22
- canonicalize?: CanonicalizePath;
23
- }): Promise<void>;
24
15
  export declare class IndexProjectTool implements IToolHandler {
25
16
  name: string;
26
17
  description: string;
@@ -63,15 +54,5 @@ export declare class IndexProjectTool implements IToolHandler {
63
54
  private contextualSearch;
64
55
  constructor();
65
56
  handle(params: unknown): Promise<ToolResponse>;
66
- /**
67
- * Executa indexação em background usando o ETL Pipeline de 4 estágios.
68
- *
69
- * O pipeline substitui o monobloco contextualSearch.indexProject() anterior:
70
- * discover → parse → resolve → load
71
- *
72
- * Mantém compatibilidade: warmCache continua funcionando via contextualSearch.
73
- */
74
- private executeIndexing;
75
57
  }
76
- export {};
77
58
  //# sourceMappingURL=index_project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index_project.d.ts","sourceRoot":"","sources":["../../src/tools/index_project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAsBhD,KAAK,gBAAgB,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjE,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,gBAA2B,GACxC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED,qBAAa,gBAAiB,YAAW,YAAY;IACnD,IAAI,SAAmB;IACvB,WAAW,SACuE;IAClF,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCT;IAEF,OAAO,CAAC,gBAAgB,CAAsB;;IAMxC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAiIpD;;;;;;;OAOG;YACW,eAAe;CAkG9B"}
1
+ {"version":3,"file":"index_project.d.ts","sourceRoot":"","sources":["../../src/tools/index_project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqBhD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,IAAI,SAAmB;IACvB,WAAW,SACuE;IAClF,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCT;IAEF,OAAO,CAAC,gBAAgB,CAAsB;;IAMxC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CA0GrD"}
@@ -13,32 +13,12 @@
13
13
  import { ContextualSearchRLM } from "../services/search/contextual-search-rlm.js";
14
14
  import { logger } from "@massa-ai/shared";
15
15
  import { indexJobTracker } from "../services/jobs/index-job-tracker.js";
16
- import { EtlPipeline } from "../services/etl/pipeline.js";
16
+ import { executeIndexing } from "../services/indexing/execute-indexing.js";
17
+ import { acquireIndexingLease } from "../services/indexing/acquire-indexing-lease.js";
18
+ import { assertProjectRootReuse, canonicalizeProjectRoot } from "../services/project-identity/project-root-identity.js";
17
19
  import { workspaceManager } from "../services/workspace/workspace-manager.js";
18
- import { realpath } from "node:fs/promises";
19
20
  import path from "path";
20
21
  import { assertParserReadyForIndexing } from "../services/structural/parser-readiness.js";
21
- import { ManagedRunRepositoryPg } from "../data/managed-runs/managed-run-repository-pg.js";
22
- export async function canonicalizeProjectRoot(projectPath, canonicalize = realpath) {
23
- return canonicalize(path.resolve(projectPath));
24
- }
25
- export async function assertProjectRootReuse(options) {
26
- if (!options.storedProjectPath || options.forceReindex)
27
- return;
28
- const canonicalize = options.canonicalize ?? realpath;
29
- let storedCanonical;
30
- try {
31
- storedCanonical = await canonicalize(path.resolve(options.storedProjectPath));
32
- }
33
- catch {
34
- storedCanonical = path.resolve(options.storedProjectPath);
35
- }
36
- if (storedCanonical !== options.canonicalProjectPath) {
37
- throw new Error(`Project ID "${options.projectId}" already indexes canonical root ` +
38
- `"${storedCanonical}", not "${options.canonicalProjectPath}"; ` +
39
- "use forceReindex only after verifying ownership of the existing project");
40
- }
41
- }
42
22
  export class IndexProjectTool {
43
23
  name = "index_project";
44
24
  description = "Index a project directory for contextual code search with semantic embeddings";
@@ -102,53 +82,47 @@ export class IndexProjectTool {
102
82
  projectPath: canonicalProjectPath,
103
83
  projectId: finalProjectId,
104
84
  });
105
- // ── Wave 5 FR-09: acquire a managed_runs lease synchronously so the
106
- // MCP/HTTP caller gets 202 (acquired) or 409 busy BEFORE the long ETL
107
- // runs in the background. The lease is passed into the pipeline, which
108
- // owns heartbeat/complete/abort. eventId is derived from the job id so
109
- // a retry of the same job is idempotent at the lease layer (a
110
- // completed/aborted row's event_id is not reused because the partial
111
- // UNIQUE only covers active rows).
112
- const eventId = `index:${job.jobId}`;
113
- const managedRunRepo = ManagedRunRepositoryPg.getInstance();
114
- let lease;
115
- try {
116
- const beginOutcome = await managedRunRepo.begin({
117
- projectId: finalProjectId,
118
- runKind: "indexing",
119
- eventId,
120
- });
121
- if (beginOutcome.status === "busy") {
122
- // 409: another live indexer holds this project. Surface the active
123
- // runId so the caller can poll get_index_status.
124
- indexJobTracker.setResult(job.jobId, { filesIndexed: 0, chunksIndexed: 0, errors: 0, duration: 0 }, `indexing_busy:${beginOutcome.activeRunId}`);
125
- return {
126
- success: false,
127
- error: `indexing_busy:${beginOutcome.activeRunId}`,
128
- data: {
129
- jobId: job.jobId,
130
- projectId: finalProjectId,
131
- status: "busy",
132
- activeRunId: beginOutcome.activeRunId,
133
- leaseExpiresAt: beginOutcome.leaseExpiresAt,
134
- message: "Another indexing run is active for this project. Poll get_index_status(activeRunId).",
135
- },
136
- };
137
- }
138
- lease = beginOutcome.lease;
85
+ // ── Wave 5 FR-09: the lease is acquired synchronously so the caller gets
86
+ // 202 (acquired) or 409 (busy) before the background ETL starts. Only the
87
+ // ToolResponse shaping stays here a `services/` module that shapes a
88
+ // ToolResponse is the boundary RFS-03 AC-2 forbids (PR-D T14b).
89
+ const leaseOutcome = await acquireIndexingLease({
90
+ jobId: job.jobId,
91
+ projectId: finalProjectId,
92
+ });
93
+ if (leaseOutcome.status === "busy") {
94
+ return {
95
+ success: false,
96
+ error: `indexing_busy:${leaseOutcome.activeRunId}`,
97
+ data: {
98
+ jobId: job.jobId,
99
+ projectId: finalProjectId,
100
+ status: "busy",
101
+ activeRunId: leaseOutcome.activeRunId,
102
+ leaseExpiresAt: leaseOutcome.leaseExpiresAt,
103
+ message: "Another indexing run is active for this project. Poll get_index_status(activeRunId).",
104
+ },
105
+ };
139
106
  }
140
- catch (beginError) {
141
- logger.error("managed_runs begin failed", beginError, { jobId: job.jobId, projectId: finalProjectId });
142
- // Fail loud — a lease failure is a 500, not a silent retry. The caller
143
- // can retry; the lease table is the source of truth.
144
- indexJobTracker.setResult(job.jobId, { filesIndexed: 0, chunksIndexed: 0, errors: 1, duration: 0 }, `managed_runs_begin_failed:${beginError.message}`);
107
+ if (leaseOutcome.status === "failed") {
145
108
  return {
146
109
  success: false,
147
- error: `Failed to acquire indexing lease: ${beginError.message}`,
110
+ error: `Failed to acquire indexing lease: ${leaseOutcome.message}`,
148
111
  };
149
112
  }
113
+ const lease = leaseOutcome.lease;
150
114
  // Executa indexação em background (não await)
151
- this.executeIndexing(job.jobId, finalProjectId, canonicalProjectPath, forceReindex, warmCache, warmupQueries, include_tests, lease).catch((error) => {
115
+ executeIndexing({
116
+ jobId: job.jobId,
117
+ projectId: finalProjectId,
118
+ projectPath: canonicalProjectPath,
119
+ forceReindex,
120
+ warmCache,
121
+ warmupQueries,
122
+ include_tests,
123
+ managedRunLease: lease,
124
+ warmupCache: this.contextualSearch.warmupCache.bind(this.contextualSearch),
125
+ }).catch((error) => {
152
126
  logger.error("Background indexing failed", error, {
153
127
  jobId: job.jobId,
154
128
  });
@@ -177,83 +151,5 @@ export class IndexProjectTool {
177
151
  };
178
152
  }
179
153
  }
180
- /**
181
- * Executa indexação em background usando o ETL Pipeline de 4 estágios.
182
- *
183
- * O pipeline substitui o monobloco contextualSearch.indexProject() anterior:
184
- * discover → parse → resolve → load
185
- *
186
- * Mantém compatibilidade: warmCache continua funcionando via contextualSearch.
187
- */
188
- async executeIndexing(jobId, projectId, projectPath, forceReindex, warmCache, warmupQueries, include_tests = false, managedRunLease) {
189
- const startTime = Date.now();
190
- try {
191
- indexJobTracker.updateStatus(jobId, "running");
192
- logger.info("Starting project indexing via ETL Pipeline", {
193
- jobId,
194
- projectPath,
195
- projectId,
196
- forceReindex,
197
- warmCache,
198
- include_tests,
199
- });
200
- // ETL Pipeline: discover → parse → resolve → load
201
- // EventBus integration handles progress updates and WorkspaceManager status
202
- const etlResult = await EtlPipeline.getInstance().run({
203
- projectId,
204
- projectPath,
205
- jobId,
206
- forceReindex,
207
- include_tests,
208
- managedRunLease,
209
- });
210
- const duration = Date.now() - startTime;
211
- logger.info("ETL Pipeline completed", {
212
- jobId,
213
- projectId,
214
- duration,
215
- filesIndexed: etlResult.filesIndexed,
216
- filesSkipped: etlResult.filesSkipped,
217
- chunksIndexed: etlResult.chunksIndexed,
218
- symbolsIndexed: etlResult.symbolsIndexed,
219
- errors: etlResult.errors,
220
- stageTimings: etlResult.stageTimings,
221
- });
222
- // Warmup semantic search cache if requested (unchanged from before)
223
- if (warmCache) {
224
- logger.info("Starting cache warmup", { jobId, projectId });
225
- const warmupStats = await this.contextualSearch.warmupCache(projectId, projectPath, warmupQueries);
226
- logger.info("Cache warmup completed", { jobId, projectId, ...warmupStats });
227
- }
228
- // Mark job complete. Emit 100% progress immediately before the terminal
229
- // transition so any poller that reads progress atomically with status sees
230
- // a consistent completed+100% shape (the pipeline also emits this; this is
231
- // belt-and-suspenders in case the pipeline path changes).
232
- indexJobTracker.updateProgress(jobId, etlResult.filesIndexed, etlResult.filesIndexed);
233
- await indexJobTracker.setResultAndFlush(jobId, {
234
- filesIndexed: etlResult.filesIndexed,
235
- chunksIndexed: etlResult.chunksIndexed,
236
- errors: etlResult.errors,
237
- duration,
238
- activatedGraphGenerationId: etlResult.activatedGraphGenerationId,
239
- parserDiagnostics: etlResult.parserDiagnostics,
240
- });
241
- }
242
- catch (error) {
243
- const duration = Date.now() - startTime;
244
- logger.error("Project indexing failed", error, {
245
- jobId,
246
- projectPath,
247
- projectId,
248
- duration,
249
- });
250
- indexJobTracker.setResult(jobId, {
251
- filesIndexed: 0,
252
- chunksIndexed: 0,
253
- errors: 1,
254
- duration,
255
- }, error.message);
256
- }
257
- }
258
154
  }
259
155
  //# sourceMappingURL=index_project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index_project.js","sourceRoot":"","sources":["../../src/tools/index_project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index_project.js","sourceRoot":"","sources":["../../src/tools/index_project.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * @massa-ai/core - Read File Tool
3
3
  *
4
- * Optimized file reading with:
5
- * - Automatic compression for large files
6
- * - Intelligent caching
7
- * - Symbol metadata integration
8
- * - Multi-range support
9
- * - Language detection
4
+ * Schema and delegation only. Everything this tool used to do lives in
5
+ * `services/file-read/` containment, both caches, metadata, the line range
6
+ * and N9 cap, and `read-file.service.ts` (module 7), which composes them.
7
+ * Deliberately terse: the split's decision record sits in those modules'
8
+ * docblocks, and repeating it here costs this file its 125-line ceiling.
10
9
  */
11
10
  import { IToolHandler, ToolResponse } from "@massa-ai/shared";
12
11
  import { SymbolGraphService } from "../services/symbol/symbol-graph.service.js";
@@ -76,75 +75,13 @@ export declare class ReadFileTool implements IToolHandler {
76
75
  };
77
76
  required: string[];
78
77
  };
79
- private compressor;
80
- private symbolGraph?;
81
- private fileCache;
82
- private projectRootCache;
83
- private readonly CACHE_TTL;
84
- private readonly ROOT_CACHE_TTL;
78
+ private service;
85
79
  /**
86
- * Maximum entries retained in each in-memory cache. Without a cap, an
87
- * adversarial caller cycling distinct cache keys grows the map for the
88
- * process lifetime. Map preserves INSERTION order in JS; we promote a key
89
- * to most-recently-used on GET via delete+set, and evict the oldest key on
90
- * SET while over the cap. Mirrors WebController's WEB_CACHE_MAX_ENTRIES.
80
+ * The parameter's arity and type are public surface 41 measured construction
81
+ * sites, both transports among them (`design.md` §3.2 as corrected at T9) — so
82
+ * it is forwarded unchanged rather than replaced by an injected service.
91
83
  */
92
- private readonly FILE_CACHE_MAX_ENTRIES;
93
84
  constructor(symbolGraph?: SymbolGraphService);
94
85
  handle(params: unknown): Promise<ToolResponse>;
95
- /**
96
- * Resolve a filePath to an absolute path.
97
- *
98
- * Resolution rules:
99
- * - Absolute path → returned verbatim (still normalized via path.resolve, but base-independent).
100
- * - `projectId` present → resolved against the workspace `project_path`. If the
101
- * workspace lookup fails (no root), this returns null (ambiguous).
102
- * - No `projectId` AND relative `filePath` → returns null. We deliberately do NOT
103
- * fall back to `path.resolve(filePath)` against process.cwd(), because a
104
- relative
105
- * path arriving without a projectId is ambiguous and historically read from
106
- * the
107
- * server's cwd (COVERAGE finding #3). Callers must provide an absolute path or
108
- * a projectId.
109
- *
110
- * Returns null to signal an ambiguous/unsatisfiable path so `handle()` can map it
111
- * to a distinct, clear error instead of the generic "Failed to read file" catch.
112
- */
113
- private resolveFilePath;
114
- /**
115
- * Wave 5 FR-12 / AD-W5-006: filesystem-side path containment.
116
- *
117
- * An absolute path is allowed iff it resolves under one of:
118
- * 1. the project root (workspace lookup for projectId, when provided)
119
- * 2. process.cwd()
120
- * 3. an entry in MASSA_AI_READ_FILE_ROOTS (colon-separated env)
121
- *
122
- * Project root + cwd are ALWAYS allowed. Outside → teaching error listing
123
- * valid roots only (no host path enumeration). The check uses path.relative
124
- * to detect traversal out of a root (a result starting with ".." or an
125
- * absolute path on another drive means outside).
126
- *
127
- * The env allowlist is read at CALL TIME (not config-load time) so test
128
- * suites and runtime operators can set it without restarting the process.
129
- * config.readFile.extraRoots mirrors the same env for introspection.
130
- *
131
- * Returns { allowed: true } on success, or { allowed: false, error } with a
132
- * Wave-4-N6-style teaching error listing the valid roots.
133
- */
134
- private checkPathContainment;
135
- private getProjectRoot;
136
- /**
137
- * Evict the oldest (first-inserted) entries from a cache Map until it is
138
- * under FILE_CACHE_MAX_ENTRIES. Called BEFORE the new insert so the cap is
139
- * honored post-insert with a single iteration.
140
- */
141
- private evictOldest;
142
- private calculateRange;
143
- private adjustRange;
144
- private readFileWithCache;
145
- private extractMetadata;
146
- private extractLines;
147
- private detectLanguage;
148
- private extractImports;
149
86
  }
150
87
  //# sourceMappingURL=read_file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read_file.d.ts","sourceRoot":"","sources":["../../src/tools/read_file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoC,MAAM,kBAAkB,CAAC;AAKhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAyDhF,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,SAAe;IACnB,WAAW,SAEwC;IAEnD,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6DT;IAEF,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAC,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAO;gBAElC,WAAW,CAAC,EAAE,kBAAkB;IAgBtC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAgLpD;;;;;;;;;;;;;;;;;OAiBG;YACW,eAAe;IAmB7B;;;;;;;;;;;;;;;;;;;OAmBG;YACW,oBAAoB;YA2CpB,cAAc;IAsB5B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,WAAW;YASL,iBAAiB;YAgEjB,eAAe;IAgD7B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,cAAc;CAwBvB"}
1
+ {"version":3,"file":"read_file.d.ts","sourceRoot":"","sources":["../../src/tools/read_file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAI9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,SAAe;IACnB,WAAW,SAEwC;IAEnD,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6DT;IAEF,OAAO,CAAC,OAAO,CAAkB;IAEjC;;;;OAIG;gBACS,WAAW,CAAC,EAAE,kBAAkB;IAItC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CA2BrD"}