toolnet-memory 0.2.0 → 0.2.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 (341) hide show
  1. package/README.md +443 -70
  2. package/bin/toolnet-memory +66 -53
  3. package/bundle/agy.js +88 -0
  4. package/bundle/codex.js +92 -0
  5. package/bundle/context-runtime.js +56 -0
  6. package/bundle/context.js +62 -0
  7. package/bundle/doctor.js +3 -0
  8. package/bundle/full-index.js +8 -0
  9. package/bundle/learner.js +8 -0
  10. package/bundle/mcp.js +7 -0
  11. package/bundle/opencode.js +314 -0
  12. package/bundle/project-manual.js +54 -0
  13. package/bundle/setup.js +31 -0
  14. package/bundle/snapshot.js +4 -0
  15. package/bundle/work-continuity.js +12 -0
  16. package/package.json +11 -5
  17. package/dist/packages/cli/commands.js +0 -1
  18. package/dist/packages/cli/index.js +0 -1
  19. package/dist/packages/sdk/client.js +0 -78
  20. package/dist/packages/sdk/index.js +0 -1
  21. package/dist/packages/sdk/types.js +0 -1
  22. package/dist/src/api/index.js +0 -1
  23. package/dist/src/api/routes/health.js +0 -1
  24. package/dist/src/api/routes/index.js +0 -1
  25. package/dist/src/api/routes/memory.js +0 -1
  26. package/dist/src/api/routes/projects.js +0 -1
  27. package/dist/src/api/routes/search.js +0 -1
  28. package/dist/src/api/server.js +0 -1
  29. package/dist/src/capture/activity-capture.js +0 -21
  30. package/dist/src/capture/command-capture.js +0 -12
  31. package/dist/src/capture/error-capture.js +0 -14
  32. package/dist/src/capture/event-deduplicator.js +0 -28
  33. package/dist/src/capture/event-queue.js +0 -20
  34. package/dist/src/capture/file-capture.js +0 -23
  35. package/dist/src/capture/index.js +0 -8
  36. package/dist/src/capture/session-capture.js +0 -18
  37. package/dist/src/capture/tool-capture.js +0 -13
  38. package/dist/src/code-intelligence/analysis/analysis-engine.js +0 -26
  39. package/dist/src/code-intelligence/analysis/dead-code-analyzer.js +0 -127
  40. package/dist/src/code-intelligence/analysis/dependency-analyzer.js +0 -66
  41. package/dist/src/code-intelligence/analysis/index.js +0 -4
  42. package/dist/src/code-intelligence/analysis/types.js +0 -1
  43. package/dist/src/code-intelligence/architecture/architecture-engine.js +0 -48
  44. package/dist/src/code-intelligence/architecture/clusters.js +0 -322
  45. package/dist/src/code-intelligence/architecture/entry-points.js +0 -150
  46. package/dist/src/code-intelligence/architecture/hotspots.js +0 -136
  47. package/dist/src/code-intelligence/architecture/index.js +0 -6
  48. package/dist/src/code-intelligence/architecture/layers.js +0 -197
  49. package/dist/src/code-intelligence/architecture/types.js +0 -1
  50. package/dist/src/code-intelligence/chunks/index.js +0 -2
  51. package/dist/src/code-intelligence/chunks/smart-chunker.js +0 -125
  52. package/dist/src/code-intelligence/chunks/types.js +0 -1
  53. package/dist/src/code-intelligence/git/git-diff.js +0 -109
  54. package/dist/src/code-intelligence/git/index.js +0 -1
  55. package/dist/src/code-intelligence/graph/architecture.js +0 -26
  56. package/dist/src/code-intelligence/graph/graph-builder.js +0 -213
  57. package/dist/src/code-intelligence/graph/graph-store.js +0 -57
  58. package/dist/src/code-intelligence/graph/index.js +0 -1
  59. package/dist/src/code-intelligence/graph/relationships.js +0 -1
  60. package/dist/src/code-intelligence/graph/trace.js +0 -65
  61. package/dist/src/code-intelligence/impact/blast-radius.js +0 -160
  62. package/dist/src/code-intelligence/impact/change-mapper.js +0 -69
  63. package/dist/src/code-intelligence/impact/edit-tool-detector.js +0 -92
  64. package/dist/src/code-intelligence/impact/impact-analyzer.js +0 -60
  65. package/dist/src/code-intelligence/impact/impact-guard.js +0 -33
  66. package/dist/src/code-intelligence/impact/index.js +0 -5
  67. package/dist/src/code-intelligence/incremental/file-hash.js +0 -8
  68. package/dist/src/code-intelligence/incremental/incremental-indexer.js +0 -106
  69. package/dist/src/code-intelligence/incremental/manifest-builder.js +0 -19
  70. package/dist/src/code-intelligence/incremental/manifest.js +0 -31
  71. package/dist/src/code-intelligence/index.js +0 -23
  72. package/dist/src/code-intelligence/indexer/file-watcher.js +0 -1
  73. package/dist/src/code-intelligence/indexer/incremental-indexer.js +0 -1
  74. package/dist/src/code-intelligence/indexer/index.js +0 -1
  75. package/dist/src/code-intelligence/indexer/repository-indexer.js +0 -31
  76. package/dist/src/code-intelligence/indexer/repository-scanner.js +0 -50
  77. package/dist/src/code-intelligence/parsers/index.js +0 -1
  78. package/dist/src/code-intelligence/parsers/tree-sitter/index.js +0 -1
  79. package/dist/src/code-intelligence/parsers/tree-sitter/languages.js +0 -1
  80. package/dist/src/code-intelligence/parsers/tree-sitter/parser.js +0 -1
  81. package/dist/src/code-intelligence/parsers/typescript-parser.js +0 -190
  82. package/dist/src/code-intelligence/query/graph-query-engine.js +0 -275
  83. package/dist/src/code-intelligence/query/index.js +0 -2
  84. package/dist/src/code-intelligence/query/types.js +0 -1
  85. package/dist/src/code-intelligence/resolution/index.js +0 -2
  86. package/dist/src/code-intelligence/resolution/types.js +0 -1
  87. package/dist/src/code-intelligence/resolution/typescript-resolver.js +0 -316
  88. package/dist/src/code-intelligence/rich/index.js +0 -1
  89. package/dist/src/code-intelligence/rich/rich-graph-enricher.js +0 -463
  90. package/dist/src/code-intelligence/semantic/index.js +0 -2
  91. package/dist/src/code-intelligence/semantic/semantic-code-engine.js +0 -213
  92. package/dist/src/code-intelligence/semantic/source-priority.js +0 -22
  93. package/dist/src/code-intelligence/symbols/index.js +0 -1
  94. package/dist/src/code-intelligence/symbols/reference-resolver.js +0 -21
  95. package/dist/src/code-intelligence/symbols/symbol-extractor.js +0 -1
  96. package/dist/src/code-intelligence/test-analysis.js +0 -72
  97. package/dist/src/code-intelligence/test-architecture.js +0 -67
  98. package/dist/src/code-intelligence/test-impact.js +0 -47
  99. package/dist/src/code-intelligence/test-incremental.js +0 -24
  100. package/dist/src/code-intelligence/test-index.js +0 -39
  101. package/dist/src/code-intelligence/test-resolution.js +0 -54
  102. package/dist/src/code-intelligence/test-rich-graph.js +0 -48
  103. package/dist/src/code-intelligence/test-semantic.js +0 -57
  104. package/dist/src/code-intelligence/test-visualization.js +0 -36
  105. package/dist/src/code-intelligence/types.js +0 -1
  106. package/dist/src/code-intelligence/visualization/index.js +0 -2
  107. package/dist/src/code-intelligence/visualization/types.js +0 -1
  108. package/dist/src/code-intelligence/visualization/visualization-builder.js +0 -104
  109. package/dist/src/core/config.js +0 -66
  110. package/dist/src/core/global-env.js +0 -70
  111. package/dist/src/core/importance.js +0 -30
  112. package/dist/src/core/index.js +0 -5
  113. package/dist/src/core/memory-engine.js +0 -183
  114. package/dist/src/core/project-manager.js +0 -243
  115. package/dist/src/core/types.js +0 -1
  116. package/dist/src/embeddings/batch-embedder.js +0 -1
  117. package/dist/src/embeddings/cache.js +0 -1
  118. package/dist/src/embeddings/embedder.js +0 -51
  119. package/dist/src/embeddings/index.js +0 -4
  120. package/dist/src/embeddings/local.js +0 -37
  121. package/dist/src/embeddings/provider.js +0 -1
  122. package/dist/src/embeddings/remote.js +0 -76
  123. package/dist/src/embeddings/test-connection.js +0 -16
  124. package/dist/src/hooks/after-edit.js +0 -3
  125. package/dist/src/hooks/after-tool.js +0 -3
  126. package/dist/src/hooks/auto-context.js +0 -68
  127. package/dist/src/hooks/auto-impact-guard.js +0 -94
  128. package/dist/src/hooks/auto-retrieval.js +0 -27
  129. package/dist/src/hooks/before-agent.js +0 -18
  130. package/dist/src/hooks/before-compact.js +0 -3
  131. package/dist/src/hooks/before-edit.js +0 -20
  132. package/dist/src/hooks/index.js +0 -11
  133. package/dist/src/hooks/runtime.js +0 -110
  134. package/dist/src/hooks/session-end.js +0 -3
  135. package/dist/src/hooks/session-start.js +0 -3
  136. package/dist/src/index.js +0 -22
  137. package/dist/src/mcp/bootstrap.js +0 -68
  138. package/dist/src/mcp/context.js +0 -1
  139. package/dist/src/mcp/index.js +0 -3
  140. package/dist/src/mcp/server.js +0 -45
  141. package/dist/src/mcp/tools/analyze-impact.js +0 -41
  142. package/dist/src/mcp/tools/dead-code.js +0 -55
  143. package/dist/src/mcp/tools/find-callers.js +0 -24
  144. package/dist/src/mcp/tools/find-dependencies.js +0 -57
  145. package/dist/src/mcp/tools/find-symbol.js +0 -7
  146. package/dist/src/mcp/tools/get-architecture.js +0 -11
  147. package/dist/src/mcp/tools/graph-dependents.js +0 -24
  148. package/dist/src/mcp/tools/graph-neighborhood.js +0 -58
  149. package/dist/src/mcp/tools/graph-path.js +0 -43
  150. package/dist/src/mcp/tools/graph-query-utils.js +0 -32
  151. package/dist/src/mcp/tools/impact-guard.js +0 -34
  152. package/dist/src/mcp/tools/index-repository.js +0 -1
  153. package/dist/src/mcp/tools/index.js +0 -20
  154. package/dist/src/mcp/tools/memory-decisions.js +0 -1
  155. package/dist/src/mcp/tools/memory-forget.js +0 -14
  156. package/dist/src/mcp/tools/memory-recent.js +0 -1
  157. package/dist/src/mcp/tools/memory-remember.js +0 -33
  158. package/dist/src/mcp/tools/memory-rules.js +0 -1
  159. package/dist/src/mcp/tools/memory-search.js +0 -18
  160. package/dist/src/mcp/tools/memory-todos.js +0 -1
  161. package/dist/src/mcp/tools/project-context.js +0 -25
  162. package/dist/src/mcp/tools/search-code.js +0 -21
  163. package/dist/src/mcp/tools/semantic-code-search.js +0 -33
  164. package/dist/src/mcp/tools/snapshot-create.js +0 -13
  165. package/dist/src/mcp/tools/snapshot-list.js +0 -7
  166. package/dist/src/mcp/tools/snapshot-restore.js +0 -13
  167. package/dist/src/mcp/tools/trace-calls.js +0 -37
  168. package/dist/src/memory/activity.js +0 -5
  169. package/dist/src/memory/conflict-detector.js +0 -105
  170. package/dist/src/memory/consolidator.js +0 -104
  171. package/dist/src/memory/decay.js +0 -59
  172. package/dist/src/memory/decisions.js +0 -3
  173. package/dist/src/memory/deduplicate.js +0 -25
  174. package/dist/src/memory/index.js +0 -11
  175. package/dist/src/memory/maintenance.js +0 -16
  176. package/dist/src/memory/remember.js +0 -3
  177. package/dist/src/memory/rules.js +0 -3
  178. package/dist/src/memory/search.js +0 -3
  179. package/dist/src/memory/summaries.js +0 -1
  180. package/dist/src/memory/todos.js +0 -3
  181. package/dist/src/processor/decision-extractor.js +0 -13
  182. package/dist/src/processor/importance-scorer.js +0 -22
  183. package/dist/src/processor/index.js +0 -7
  184. package/dist/src/processor/memory-extractor.js +0 -59
  185. package/dist/src/processor/memory-processor.js +0 -105
  186. package/dist/src/processor/rule-extractor.js +0 -13
  187. package/dist/src/processor/summarizer.js +0 -71
  188. package/dist/src/processor/todo-extractor.js +0 -12
  189. package/dist/src/production/config-check.js +0 -34
  190. package/dist/src/production/doctor.js +0 -58
  191. package/dist/src/production/full-index.js +0 -114
  192. package/dist/src/production/health.js +0 -58
  193. package/dist/src/production/index-pipeline.js +0 -151
  194. package/dist/src/production/index.js +0 -4
  195. package/dist/src/production/project-lock.js +0 -95
  196. package/dist/src/production/project-status.js +0 -16
  197. package/dist/src/production/recovery.js +0 -15
  198. package/dist/src/production/snapshot-cli.js +0 -58
  199. package/dist/src/project-manual/cli.js +0 -77
  200. package/dist/src/project-manual/index.js +0 -2
  201. package/dist/src/project-manual/manager.js +0 -147
  202. package/dist/src/project-manual/types.js +0 -1
  203. package/dist/src/retrieval/bm25/index.js +0 -1
  204. package/dist/src/retrieval/bm25/search.js +0 -1
  205. package/dist/src/retrieval/bm25.js +0 -30
  206. package/dist/src/retrieval/context-budget.js +0 -1
  207. package/dist/src/retrieval/context-builder.js +0 -22
  208. package/dist/src/retrieval/graph/index.js +0 -1
  209. package/dist/src/retrieval/graph/search.js +0 -1
  210. package/dist/src/retrieval/hybrid/hybrid-search.js +0 -1
  211. package/dist/src/retrieval/hybrid/index.js +0 -1
  212. package/dist/src/retrieval/hybrid-search.js +0 -68
  213. package/dist/src/retrieval/importance.js +0 -16
  214. package/dist/src/retrieval/index.js +0 -12
  215. package/dist/src/retrieval/query-analyzer.js +0 -32
  216. package/dist/src/retrieval/query-classifier.js +0 -1
  217. package/dist/src/retrieval/query-expansion.js +0 -1
  218. package/dist/src/retrieval/recency.js +0 -12
  219. package/dist/src/retrieval/reranker/index.js +0 -1
  220. package/dist/src/retrieval/reranker/reranker.js +0 -1
  221. package/dist/src/retrieval/retrieval-engine.js +0 -17
  222. package/dist/src/retrieval/tokenizer.js +0 -9
  223. package/dist/src/retrieval/type-priority.js +0 -10
  224. package/dist/src/retrieval/types.js +0 -1
  225. package/dist/src/retrieval/vector/index.js +0 -4
  226. package/dist/src/retrieval/vector/metadata-filter.js +0 -1
  227. package/dist/src/retrieval/vector/persistence.js +0 -67
  228. package/dist/src/retrieval/vector/search.js +0 -12
  229. package/dist/src/retrieval/vector/test-persistence.js +0 -36
  230. package/dist/src/retrieval/vector/upsert.js +0 -40
  231. package/dist/src/retrieval/vector/vector-store.js +0 -89
  232. package/dist/src/retrieval/vector-hybrid-engine.js +0 -91
  233. package/dist/src/runtime/bootstrap.js +0 -28
  234. package/dist/src/runtime/graceful.js +0 -17
  235. package/dist/src/runtime/index.js +0 -3
  236. package/dist/src/runtime/toolnet-memory-runtime.js +0 -156
  237. package/dist/src/security/encryption.js +0 -1
  238. package/dist/src/security/file-filter.js +0 -30
  239. package/dist/src/security/index.js +0 -3
  240. package/dist/src/security/sanitizer.js +0 -49
  241. package/dist/src/security/secret-scanner.js +0 -56
  242. package/dist/src/session/agy/adapter.js +0 -159
  243. package/dist/src/session/agy/cli.js +0 -87
  244. package/dist/src/session/agy/hook-installer.js +0 -62
  245. package/dist/src/session/agy/hook.js +0 -167
  246. package/dist/src/session/agy/index.js +0 -5
  247. package/dist/src/session/agy/project-resolver.js +0 -27
  248. package/dist/src/session/agy/recovery.js +0 -112
  249. package/dist/src/session/agy/transcript.js +0 -191
  250. package/dist/src/session/codex/adapter.js +0 -138
  251. package/dist/src/session/codex/cli.js +0 -236
  252. package/dist/src/session/codex/context-hook-installer.js +0 -70
  253. package/dist/src/session/codex/context-hook.js +0 -69
  254. package/dist/src/session/codex/discovery.js +0 -138
  255. package/dist/src/session/codex/index.js +0 -6
  256. package/dist/src/session/codex/notify-installer.js +0 -135
  257. package/dist/src/session/codex/project-resolver.js +0 -25
  258. package/dist/src/session/codex/recovery.js +0 -27
  259. package/dist/src/session/codex/rollout.js +0 -186
  260. package/dist/src/session/core.js +0 -239
  261. package/dist/src/session/identity.js +0 -57
  262. package/dist/src/session/index.js +0 -9
  263. package/dist/src/session/learner/cli.js +0 -62
  264. package/dist/src/session/learner/extractor.js +0 -461
  265. package/dist/src/session/learner/index.js +0 -4
  266. package/dist/src/session/learner/journal.js +0 -159
  267. package/dist/src/session/learner/learner.js +0 -124
  268. package/dist/src/session/learner/types.js +0 -1
  269. package/dist/src/session/opencode/adapter.js +0 -553
  270. package/dist/src/session/opencode/cli.js +0 -121
  271. package/dist/src/session/opencode/index.js +0 -2
  272. package/dist/src/session/opencode/plugin-installer.js +0 -230
  273. package/dist/src/session/store.js +0 -242
  274. package/dist/src/session/types.js +0 -1
  275. package/dist/src/session/utils.js +0 -47
  276. package/dist/src/session/wal.js +0 -303
  277. package/dist/src/snapshot/index.js +0 -2
  278. package/dist/src/snapshot/manager.js +0 -130
  279. package/dist/src/snapshot/test-snapshot.js +0 -28
  280. package/dist/src/snapshot/types.js +0 -1
  281. package/dist/src/storage/architecture-store.js +0 -37
  282. package/dist/src/storage/cleanup-health.js +0 -20
  283. package/dist/src/storage/code-analysis-store.js +0 -35
  284. package/dist/src/storage/code-chunk-store.js +0 -25
  285. package/dist/src/storage/code-graph-store.js +0 -24
  286. package/dist/src/storage/code-manifest-store.js +0 -24
  287. package/dist/src/storage/code-vector-store.js +0 -25
  288. package/dist/src/storage/github/client.js +0 -1
  289. package/dist/src/storage/github/index.js +0 -1
  290. package/dist/src/storage/google-drive/client.js +0 -1
  291. package/dist/src/storage/google-drive/index.js +0 -1
  292. package/dist/src/storage/huggingface/client.js +0 -116
  293. package/dist/src/storage/huggingface/index.js +0 -1
  294. package/dist/src/storage/index.js +0 -16
  295. package/dist/src/storage/list-bucket-raw.js +0 -14
  296. package/dist/src/storage/list-bucket-tree.js +0 -38
  297. package/dist/src/storage/local/client.js +0 -99
  298. package/dist/src/storage/local/index.js +0 -1
  299. package/dist/src/storage/memory-store.js +0 -30
  300. package/dist/src/storage/project/cleanup-layout-v1.js +0 -72
  301. package/dist/src/storage/project/folder.js +0 -15
  302. package/dist/src/storage/project/index.js +0 -3
  303. package/dist/src/storage/project/layout.js +0 -74
  304. package/dist/src/storage/project/migrate-layout-v2.js +0 -101
  305. package/dist/src/storage/project/migrate.js +0 -73
  306. package/dist/src/storage/project/scoped-provider.js +0 -165
  307. package/dist/src/storage/provider.js +0 -26
  308. package/dist/src/storage/retrying-provider.js +0 -23
  309. package/dist/src/storage/test-connection.js +0 -32
  310. package/dist/src/storage/type-resolution-store.js +0 -26
  311. package/dist/src/storage/types.js +0 -1
  312. package/dist/src/storage/vector-store.js +0 -30
  313. package/dist/src/storage/visualization-store.js +0 -25
  314. package/dist/src/sync/compressor.js +0 -1
  315. package/dist/src/sync/conflict-resolver.js +0 -1
  316. package/dist/src/sync/downloader.js +0 -1
  317. package/dist/src/sync/index.js +0 -1
  318. package/dist/src/sync/sync-engine.js +0 -1
  319. package/dist/src/sync/upload-queue.js +0 -1
  320. package/dist/src/utils/retry.js +0 -29
  321. package/dist/src/visualization/server.js +0 -270
  322. package/dist/src/work-continuity/brief-cache.js +0 -107
  323. package/dist/src/work-continuity/brief.js +0 -349
  324. package/dist/src/work-continuity/cli.js +0 -96
  325. package/dist/src/work-continuity/context-cli.js +0 -106
  326. package/dist/src/work-continuity/context-runtime-cli.js +0 -88
  327. package/dist/src/work-continuity/extractor.js +0 -339
  328. package/dist/src/work-continuity/handoff.js +0 -185
  329. package/dist/src/work-continuity/index.js +0 -14
  330. package/dist/src/work-continuity/injection.js +0 -84
  331. package/dist/src/work-continuity/journal.js +0 -49
  332. package/dist/src/work-continuity/learner.js +0 -127
  333. package/dist/src/work-continuity/reducer.js +0 -316
  334. package/dist/src/work-continuity/semantic-extractor.js +0 -360
  335. package/dist/src/work-continuity/semantic-journal.js +0 -55
  336. package/dist/src/work-continuity/semantic-learner.js +0 -125
  337. package/dist/src/work-continuity/semantic-reducer.js +0 -268
  338. package/dist/src/work-continuity/semantic-types.js +0 -1
  339. package/dist/src/work-continuity/types.js +0 -1
  340. package/dist/visualization/public/index.html +0 -2896
  341. package/dist/visualization/public/vendor/3d-force-graph.min.js +0 -5
@@ -1,316 +0,0 @@
1
- import { createHash, } from "node:crypto";
2
- import { dirname, relative, resolve, } from "node:path";
3
- import ts from "typescript";
4
- function normalize(value) {
5
- return value
6
- .replaceAll("\\", "/")
7
- .replace(/^\.\//, "");
8
- }
9
- function hash(value) {
10
- return createHash("sha256")
11
- .update(value)
12
- .digest("hex")
13
- .slice(0, 24);
14
- }
15
- function lineOf(source, node) {
16
- return source
17
- .getLineAndCharacterOfPosition(node.getStart(source)).line + 1;
18
- }
19
- function declarationName(declaration) {
20
- const named = declaration;
21
- if (named.name &&
22
- ts.isIdentifier(named.name)) {
23
- return named.name.text;
24
- }
25
- return undefined;
26
- }
27
- export class TypeScriptTypeResolver {
28
- graph;
29
- constructor(graph) {
30
- this.graph = graph;
31
- }
32
- async resolveProject(projectId, rootPath) {
33
- const config = this.loadConfig(rootPath);
34
- const program = ts.createProgram({
35
- rootNames: config.fileNames,
36
- options: config.options,
37
- });
38
- const checker = program.getTypeChecker();
39
- const output = [];
40
- for (const source of program.getSourceFiles()) {
41
- if (source.isDeclarationFile) {
42
- continue;
43
- }
44
- const absolute = resolve(source.fileName);
45
- const relativePath = normalize(relative(rootPath, absolute));
46
- /*
47
- * Không index node_modules hoặc file ngoài project.
48
- */
49
- if (relativePath.startsWith("../") ||
50
- relativePath.includes("node_modules/")) {
51
- continue;
52
- }
53
- const visit = (node) => {
54
- if (ts.isCallExpression(node)) {
55
- const result = this.resolveCall({
56
- projectId,
57
- rootPath,
58
- source,
59
- node,
60
- checker,
61
- });
62
- if (result) {
63
- output.push(result);
64
- }
65
- }
66
- if (ts.isClassDeclaration(node)) {
67
- output.push(...this.resolveHeritage({
68
- projectId,
69
- rootPath,
70
- source,
71
- node,
72
- checker,
73
- }));
74
- }
75
- ts.forEachChild(node, visit);
76
- };
77
- visit(source);
78
- }
79
- return {
80
- version: 1,
81
- projectId,
82
- updatedAt: new Date()
83
- .toISOString(),
84
- total: output.length,
85
- exact: output.filter((item) => item.confidence ===
86
- "exact").length,
87
- high: output.filter((item) => item.confidence ===
88
- "high").length,
89
- fallback: output.filter((item) => item.confidence ===
90
- "fallback").length,
91
- resolutions: output,
92
- };
93
- }
94
- resolveCall(input) {
95
- const { projectId, rootPath, source, node, checker, } = input;
96
- let declaration;
97
- /*
98
- * Đây là phần quan trọng:
99
- * TypeChecker resolve signature thực tế của obj.method().
100
- */
101
- const signature = checker.getResolvedSignature(node);
102
- declaration =
103
- signature?.declaration;
104
- if (!declaration) {
105
- const symbol = checker.getSymbolAtLocation(node.expression);
106
- declaration =
107
- symbol
108
- ?.valueDeclaration ??
109
- symbol
110
- ?.declarations?.[0];
111
- }
112
- if (!declaration) {
113
- return this.fallbackCall(projectId, rootPath, source, node);
114
- }
115
- return this.fromDeclaration({
116
- projectId,
117
- rootPath,
118
- source,
119
- sourceNode: node,
120
- declaration,
121
- expression: node.expression
122
- .getText(source),
123
- kind: "CALL",
124
- });
125
- }
126
- resolveHeritage(input) {
127
- const { projectId, rootPath, source, node, checker, } = input;
128
- const output = [];
129
- for (const clause of node.heritageClauses ??
130
- []) {
131
- for (const item of clause.types) {
132
- const symbol = checker.getSymbolAtLocation(item.expression);
133
- const declaration = symbol
134
- ?.valueDeclaration ??
135
- symbol
136
- ?.declarations?.[0];
137
- if (!declaration) {
138
- continue;
139
- }
140
- const result = this.fromDeclaration({
141
- projectId,
142
- rootPath,
143
- source,
144
- sourceNode: item,
145
- declaration,
146
- expression: item.getText(source),
147
- kind: clause.token ===
148
- ts.SyntaxKind
149
- .ExtendsKeyword
150
- ? "EXTENDS"
151
- : "IMPLEMENTS",
152
- });
153
- if (result) {
154
- output.push(result);
155
- }
156
- }
157
- }
158
- return output;
159
- }
160
- fromDeclaration(input) {
161
- const declarationSource = input.declaration
162
- .getSourceFile();
163
- if (declarationSource
164
- .isDeclarationFile) {
165
- return null;
166
- }
167
- const targetFile = normalize(relative(input.rootPath, resolve(declarationSource
168
- .fileName)));
169
- if (targetFile.startsWith("../") ||
170
- targetFile.includes("node_modules/")) {
171
- return null;
172
- }
173
- const targetLine = lineOf(declarationSource, input.declaration);
174
- const targetName = declarationName(input.declaration) ??
175
- input.expression
176
- .split(".")
177
- .at(-1);
178
- const graphSymbol = this.findGraphSymbol(input.projectId, targetFile, targetLine, targetName);
179
- const sourceFile = normalize(relative(input.rootPath, resolve(input.source
180
- .fileName)));
181
- return {
182
- id: hash([
183
- input.projectId,
184
- sourceFile,
185
- lineOf(input.source, input.sourceNode),
186
- input.kind,
187
- targetFile,
188
- targetLine,
189
- ].join(":")),
190
- projectId: input.projectId,
191
- kind: input.kind,
192
- sourceFile,
193
- sourceLine: lineOf(input.source, input.sourceNode),
194
- expression: input.expression,
195
- targetFile,
196
- targetLine,
197
- targetName,
198
- targetQualifiedName: graphSymbol
199
- ?.qualifiedName,
200
- targetSymbolId: graphSymbol?.id,
201
- confidence: graphSymbol
202
- ? "exact"
203
- : "high",
204
- resolver: "typescript-checker",
205
- };
206
- }
207
- fallbackCall(projectId, rootPath, source, node) {
208
- const name = node.expression
209
- .getText(source)
210
- .split(".")
211
- .at(-1);
212
- if (!name) {
213
- return null;
214
- }
215
- const candidates = this.graph
216
- .findByName(projectId, name)
217
- .filter((symbol) => symbol.type ===
218
- "function" ||
219
- symbol.type ===
220
- "method");
221
- if (candidates.length !== 1) {
222
- return null;
223
- }
224
- const target = candidates[0];
225
- const sourceFile = normalize(relative(rootPath, resolve(source.fileName)));
226
- return {
227
- id: hash(`${projectId}:${sourceFile}:${lineOf(source, node)}:${target.id}`),
228
- projectId,
229
- kind: "CALL",
230
- sourceFile,
231
- sourceLine: lineOf(source, node),
232
- expression: node.expression
233
- .getText(source),
234
- targetFile: target.filePath,
235
- targetLine: target.startLine,
236
- targetName: target.name,
237
- targetQualifiedName: target.qualifiedName,
238
- targetSymbolId: target.id,
239
- confidence: "fallback",
240
- resolver: "graph-fallback",
241
- };
242
- }
243
- findGraphSymbol(projectId, filePath, line, name) {
244
- const symbols = this.graph
245
- .allSymbols(projectId)
246
- .filter((symbol) => normalize(symbol.filePath) ===
247
- normalize(filePath));
248
- /*
249
- * Ưu tiên symbol chứa declaration line.
250
- */
251
- const containing = symbols.filter((symbol) => typeof symbol.startLine ===
252
- "number" &&
253
- typeof symbol.endLine ===
254
- "number" &&
255
- symbol.startLine <=
256
- line &&
257
- symbol.endLine >=
258
- line);
259
- if (name) {
260
- const named = containing.find((symbol) => symbol.name ===
261
- name ||
262
- (symbol.qualifiedName
263
- ?.endsWith(`.${name}`) ?? false));
264
- if (named) {
265
- return named;
266
- }
267
- }
268
- return containing
269
- .sort((a, b) => ((a.endLine ?? 0) -
270
- (a.startLine ?? 0)) -
271
- ((b.endLine ?? 0) -
272
- (b.startLine ?? 0)))[0];
273
- }
274
- loadConfig(rootPath) {
275
- const configPath = ts.findConfigFile(rootPath, ts.sys.fileExists, "tsconfig.json");
276
- if (configPath) {
277
- const config = ts.readConfigFile(configPath, ts.sys.readFile);
278
- if (config.error) {
279
- throw new Error(ts.flattenDiagnosticMessageText(config.error.messageText, "\n"));
280
- }
281
- return ts.parseJsonConfigFileContent(config.config, ts.sys, dirname(configPath));
282
- }
283
- /*
284
- * Repo không có tsconfig vẫn chạy JS/TS.
285
- */
286
- const fileNames = ts.sys.readDirectory(rootPath, [
287
- ".ts",
288
- ".tsx",
289
- ".js",
290
- ".jsx",
291
- ".mts",
292
- ".cts",
293
- ".mjs",
294
- ".cjs",
295
- ], [
296
- "node_modules",
297
- ".git",
298
- "dist",
299
- "build",
300
- "coverage",
301
- ]);
302
- return {
303
- fileNames,
304
- options: {
305
- allowJs: true,
306
- checkJs: false,
307
- target: ts.ScriptTarget.ES2022,
308
- module: ts.ModuleKind.NodeNext,
309
- moduleResolution: ts.ModuleResolutionKind
310
- .NodeNext,
311
- skipLibCheck: true,
312
- noEmit: true,
313
- },
314
- };
315
- }
316
- }
@@ -1 +0,0 @@
1
- export * from "./rich-graph-enricher.js";