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,116 +0,0 @@
1
- import { DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client, } from "@aws-sdk/client-s3";
2
- import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
3
- export class HuggingFaceStorageProvider {
4
- name = "huggingface";
5
- client;
6
- bucket;
7
- constructor(options) {
8
- this.bucket =
9
- options.bucket;
10
- this.client =
11
- new S3Client({
12
- region: "us-east-1",
13
- endpoint: `https://s3.hf.co/${options.namespace}`,
14
- forcePathStyle: true,
15
- requestChecksumCalculation: "WHEN_REQUIRED",
16
- responseChecksumValidation: "WHEN_REQUIRED",
17
- credentials: {
18
- accessKeyId: options.accessKeyId,
19
- secretAccessKey: options.secretAccessKey,
20
- },
21
- });
22
- }
23
- async put(key, data, contentType = "application/octet-stream") {
24
- const body = typeof data === "string"
25
- ? Buffer.from(data, "utf8")
26
- : data;
27
- await this.client.send(new PutObjectCommand({
28
- Bucket: this.bucket,
29
- Key: key,
30
- Body: body,
31
- ContentType: contentType,
32
- }));
33
- }
34
- async get(key) {
35
- const signedUrl = await getSignedUrl(this.client, new GetObjectCommand({
36
- Bucket: this.bucket,
37
- Key: key,
38
- }), {
39
- expiresIn: 60,
40
- });
41
- const response = await fetch(signedUrl, {
42
- redirect: "follow",
43
- });
44
- if (response.status === 404) {
45
- return null;
46
- }
47
- if (!response.ok) {
48
- throw new Error(`HF download failed: ${response.status} ${response.statusText}`);
49
- }
50
- return new Uint8Array(await response.arrayBuffer());
51
- }
52
- async getText(key) {
53
- const data = await this.get(key);
54
- if (!data) {
55
- return null;
56
- }
57
- return Buffer
58
- .from(data)
59
- .toString("utf8");
60
- }
61
- async exists(key) {
62
- try {
63
- await this.client.send(new HeadObjectCommand({
64
- Bucket: this.bucket,
65
- Key: key,
66
- }));
67
- return true;
68
- }
69
- catch (error) {
70
- if (typeof error === "object" &&
71
- error !== null &&
72
- "$metadata" in error) {
73
- const status = error.$metadata
74
- ?.httpStatusCode;
75
- if (status === 404) {
76
- return false;
77
- }
78
- }
79
- throw error;
80
- }
81
- }
82
- async delete(key) {
83
- await this.client.send(new DeleteObjectCommand({
84
- Bucket: this.bucket,
85
- Key: key,
86
- }));
87
- }
88
- async list(prefix = "") {
89
- const output = [];
90
- let continuationToken;
91
- do {
92
- const response = await this.client.send(new ListObjectsV2Command({
93
- Bucket: this.bucket,
94
- Prefix: prefix || undefined,
95
- ContinuationToken: continuationToken,
96
- }));
97
- for (const item of response.Contents ?? []) {
98
- if (!item.Key) {
99
- continue;
100
- }
101
- output.push({
102
- key: item.Key,
103
- size: item.Size,
104
- updatedAt: item.LastModified
105
- ?.toISOString(),
106
- });
107
- }
108
- continuationToken =
109
- response.IsTruncated
110
- ? response
111
- .NextContinuationToken
112
- : undefined;
113
- } while (continuationToken);
114
- return output;
115
- }
116
- }
@@ -1 +0,0 @@
1
- export * from "./client.js";
@@ -1,16 +0,0 @@
1
- export * from "./types.js";
2
- export * from "./provider.js";
3
- export * from "./memory-store.js";
4
- export * from "./local/index.js";
5
- export * from "./huggingface/index.js";
6
- export * from "./vector-store.js";
7
- export * from "./code-graph-store.js";
8
- export * from "./code-manifest-store.js";
9
- export * from "./code-chunk-store.js";
10
- export * from "./code-vector-store.js";
11
- export * from "./retrying-provider.js";
12
- export * from "./project/index.js";
13
- export * from "./type-resolution-store.js";
14
- export * from "./architecture-store.js";
15
- export * from "./code-analysis-store.js";
16
- export * from "./visualization-store.js";
@@ -1,14 +0,0 @@
1
- import "dotenv/config";
2
- import { loadConfig } from "../core/index.js";
3
- import { createStorageProvider, withStorageRetry, } from "./index.js";
4
- const config = loadConfig();
5
- const storage = withStorageRetry(createStorageProvider({
6
- provider: config.storage.provider,
7
- huggingface: config.storage.huggingface,
8
- localRoot: config.storage.localRoot,
9
- }), { attempts: 3 });
10
- const objects = await storage.list("");
11
- console.log(`TOTAL: ${objects.length}\n`);
12
- for (const object of objects.sort((a, b) => a.key.localeCompare(b.key))) {
13
- console.log(object.key);
14
- }
@@ -1,38 +0,0 @@
1
- import "dotenv/config";
2
- import { loadConfig, } from "../core/index.js";
3
- import { createStorageProvider, withStorageRetry, } from "./index.js";
4
- function tree(keys) {
5
- const root = {};
6
- for (const key of keys) {
7
- let node = root;
8
- for (const part of key.split("/").filter(Boolean)) {
9
- node[part] ??= {};
10
- node = node[part];
11
- }
12
- }
13
- function print(node, prefix = "") {
14
- const entries = Object.keys(node).sort();
15
- entries.forEach((name, index) => {
16
- const last = index === entries.length - 1;
17
- console.log(`${prefix}${last ? "└── " : "├── "}${name}`);
18
- print(node[name], prefix + (last ? " " : "│ "));
19
- });
20
- }
21
- print(root);
22
- }
23
- async function main() {
24
- const config = loadConfig();
25
- const storage = withStorageRetry(createStorageProvider({
26
- provider: config.storage.provider,
27
- huggingface: config.storage.huggingface,
28
- localRoot: config.storage.localRoot,
29
- }), { attempts: 3 });
30
- const objects = await storage.list("");
31
- console.log(`Bucket: ${process.env.HF_BUCKET}`);
32
- console.log(`Objects: ${objects.length}\n`);
33
- tree(objects.map((x) => x.key));
34
- }
35
- main().catch((err) => {
36
- console.error(err);
37
- process.exit(1);
38
- });
@@ -1,99 +0,0 @@
1
- import { access, mkdir, readFile, readdir, rm, stat, writeFile, } from "node:fs/promises";
2
- import { dirname, join, relative, resolve, } from "node:path";
3
- export class LocalStorageProvider {
4
- root;
5
- name = "local";
6
- constructor(root) {
7
- this.root = root;
8
- }
9
- path(key) {
10
- const safeKey = key.replace(/^\/+/, "");
11
- return resolve(this.root, safeKey);
12
- }
13
- async put(key, data) {
14
- const path = this.path(key);
15
- await mkdir(dirname(path), {
16
- recursive: true,
17
- });
18
- await writeFile(path, data);
19
- }
20
- async get(key) {
21
- try {
22
- return await readFile(this.path(key));
23
- }
24
- catch (error) {
25
- if (typeof error === "object" &&
26
- error !== null &&
27
- "code" in error &&
28
- error.code === "ENOENT") {
29
- return null;
30
- }
31
- throw error;
32
- }
33
- }
34
- async getText(key) {
35
- const data = await this.get(key);
36
- if (!data) {
37
- return null;
38
- }
39
- return Buffer
40
- .from(data)
41
- .toString("utf8");
42
- }
43
- async exists(key) {
44
- try {
45
- await access(this.path(key));
46
- return true;
47
- }
48
- catch {
49
- return false;
50
- }
51
- }
52
- async delete(key) {
53
- await rm(this.path(key), {
54
- force: true,
55
- });
56
- }
57
- async list(prefix = "") {
58
- const start = this.path(prefix);
59
- const output = [];
60
- try {
61
- await access(start);
62
- }
63
- catch {
64
- return output;
65
- }
66
- const walk = async (directory) => {
67
- const entries = await readdir(directory, {
68
- withFileTypes: true,
69
- });
70
- for (const entry of entries) {
71
- const fullPath = join(directory, entry.name);
72
- if (entry.isDirectory()) {
73
- await walk(fullPath);
74
- continue;
75
- }
76
- const info = await stat(fullPath);
77
- output.push({
78
- key: relative(this.root, fullPath),
79
- size: info.size,
80
- updatedAt: info.mtime
81
- .toISOString(),
82
- });
83
- }
84
- };
85
- const info = await stat(start);
86
- if (info.isDirectory()) {
87
- await walk(start);
88
- }
89
- else {
90
- output.push({
91
- key: relative(this.root, start),
92
- size: info.size,
93
- updatedAt: info.mtime
94
- .toISOString(),
95
- });
96
- }
97
- return output;
98
- }
99
- }
@@ -1 +0,0 @@
1
- export * from "./client.js";
@@ -1,30 +0,0 @@
1
- export class MemoryStore {
2
- storage;
3
- constructor(storage) {
4
- this.storage = storage;
5
- }
6
- key(projectId) {
7
- return [
8
- "projects",
9
- projectId,
10
- "memories",
11
- "current.json",
12
- ].join("/");
13
- }
14
- async load(projectId) {
15
- const text = await this.storage
16
- .getText(this.key(projectId));
17
- if (!text) {
18
- return [];
19
- }
20
- const parsed = JSON.parse(text);
21
- if (!Array.isArray(parsed)) {
22
- throw new Error("Invalid memory snapshot");
23
- }
24
- return parsed;
25
- }
26
- async save(projectId, memories) {
27
- const payload = JSON.stringify(memories, null, 2);
28
- await this.storage.put(this.key(projectId), payload, "application/json");
29
- }
30
- }
@@ -1,72 +0,0 @@
1
- import "dotenv/config";
2
- import { loadConfig, } from "../../core/index.js";
3
- import { createStorageProvider, withStorageRetry, } from "../index.js";
4
- function destination(key) {
5
- let m;
6
- m =
7
- key.match(/^(projects\/[^/]+\/)memories\/(.+)$/);
8
- if (m) {
9
- return `${m[1]}memory/records/${m[2]}`;
10
- }
11
- m =
12
- key.match(/^(projects\/[^/]+\/)vectors\/(.+)$/);
13
- if (m) {
14
- return `${m[1]}memory/vectors/${m[2]}`;
15
- }
16
- m =
17
- key.match(/^(projects\/[^/]+\/)graph\/(.+)$/);
18
- if (m) {
19
- return `${m[1]}code/graph/${m[2]}`;
20
- }
21
- m =
22
- key.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)memories\/(.+)$/);
23
- if (m) {
24
- return `${m[1]}memory/records/${m[2]}`;
25
- }
26
- m =
27
- key.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)vectors\/(.+)$/);
28
- if (m) {
29
- return `${m[1]}memory/vectors/${m[2]}`;
30
- }
31
- m =
32
- key.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)graph\/(.+)$/);
33
- if (m) {
34
- return `${m[1]}code/graph/${m[2]}`;
35
- }
36
- return null;
37
- }
38
- async function main() {
39
- const config = loadConfig();
40
- const storage = withStorageRetry(createStorageProvider({
41
- provider: config.storage.provider,
42
- huggingface: config.storage.huggingface,
43
- localRoot: config.storage.localRoot,
44
- }), {
45
- attempts: 3,
46
- });
47
- const objects = await storage.list("projects/");
48
- const oldObjects = objects
49
- .map((item) => ({
50
- from: item.key,
51
- to: destination(item.key),
52
- }))
53
- .filter((item) => Boolean(item.to));
54
- let deleted = 0;
55
- for (const item of oldObjects) {
56
- const newExists = await storage.exists(item.to);
57
- if (!newExists) {
58
- throw new Error(`REFUSE DELETE: destination missing: ${item.to}`);
59
- }
60
- console.log(`DELETE OLD ${item.from}`);
61
- await storage.delete(item.from);
62
- deleted++;
63
- }
64
- console.log({
65
- ok: true,
66
- deleted,
67
- });
68
- }
69
- main().catch((error) => {
70
- console.error(error);
71
- process.exit(1);
72
- });
@@ -1,15 +0,0 @@
1
- export function sanitizeProjectFolder(name) {
2
- const value = name
3
- .trim()
4
- .replace(/\s+/g, "_")
5
- .replace(/[^A-Za-z0-9._-]/g, "_")
6
- .replace(/_+/g, "_")
7
- .replace(/^\.+|\.+$/g, "")
8
- .slice(0, 100);
9
- if (!value ||
10
- value === "." ||
11
- value === "..") {
12
- throw new Error("Invalid project storage folder");
13
- }
14
- return value;
15
- }
@@ -1,3 +0,0 @@
1
- export * from "./folder.js";
2
- export * from "./scoped-provider.js";
3
- export * from "./layout.js";
@@ -1,74 +0,0 @@
1
- export function mapProjectStoragePath(key) {
2
- const clean = key.replace(/^\/+/, "");
3
- /*
4
- * Relative project keys
5
- */
6
- if (clean.startsWith("memories/")) {
7
- return ("memory/records/" +
8
- clean.slice("memories/".length));
9
- }
10
- if (clean.startsWith("vectors/")) {
11
- return ("memory/vectors/" +
12
- clean.slice("vectors/".length));
13
- }
14
- if (clean.startsWith("graph/")) {
15
- return ("code/graph/" +
16
- clean.slice("graph/".length));
17
- }
18
- /*
19
- * Snapshot logical keys
20
- */
21
- let snapshotMatch = clean.match(/^(snapshots\/[^/]+\/)memories\/(.+)$/);
22
- if (snapshotMatch) {
23
- return `${snapshotMatch[1]}memory/records/${snapshotMatch[2]}`;
24
- }
25
- snapshotMatch =
26
- clean.match(/^(snapshots\/[^/]+\/)vectors\/(.+)$/);
27
- if (snapshotMatch) {
28
- return `${snapshotMatch[1]}memory/vectors/${snapshotMatch[2]}`;
29
- }
30
- snapshotMatch =
31
- clean.match(/^(snapshots\/[^/]+\/)graph\/(.+)$/);
32
- if (snapshotMatch) {
33
- return `${snapshotMatch[1]}code/graph/${snapshotMatch[2]}`;
34
- }
35
- /*
36
- * Full project snapshot keys
37
- */
38
- let fullSnapshotMatch = clean.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)memories\/(.+)$/);
39
- if (fullSnapshotMatch) {
40
- return `${fullSnapshotMatch[1]}memory/records/${fullSnapshotMatch[2]}`;
41
- }
42
- fullSnapshotMatch =
43
- clean.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)vectors\/(.+)$/);
44
- if (fullSnapshotMatch) {
45
- return `${fullSnapshotMatch[1]}memory/vectors/${fullSnapshotMatch[2]}`;
46
- }
47
- fullSnapshotMatch =
48
- clean.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)graph\/(.+)$/);
49
- if (fullSnapshotMatch) {
50
- return `${fullSnapshotMatch[1]}code/graph/${fullSnapshotMatch[2]}`;
51
- }
52
- /*
53
- * Full project keys
54
- *
55
- * projects/<project>/memories/...
56
- * projects/<project>/vectors/...
57
- * projects/<project>/graph/...
58
- */
59
- let match = clean.match(/^(projects\/[^/]+\/)memories\/(.+)$/);
60
- if (match) {
61
- return (`${match[1]}memory/records/${match[2]}`);
62
- }
63
- match =
64
- clean.match(/^(projects\/[^/]+\/)vectors\/(.+)$/);
65
- if (match) {
66
- return (`${match[1]}memory/vectors/${match[2]}`);
67
- }
68
- match =
69
- clean.match(/^(projects\/[^/]+\/)graph\/(.+)$/);
70
- if (match) {
71
- return (`${match[1]}code/graph/${match[2]}`);
72
- }
73
- return clean;
74
- }
@@ -1,101 +0,0 @@
1
- import "dotenv/config";
2
- import { createHash, } from "node:crypto";
3
- import { loadConfig, } from "../../core/index.js";
4
- import { createStorageProvider, withStorageRetry, } from "../index.js";
5
- function sha(text) {
6
- return createHash("sha256")
7
- .update(text)
8
- .digest("hex");
9
- }
10
- function destination(key) {
11
- let match;
12
- /*
13
- * Current state
14
- */
15
- match =
16
- key.match(/^(projects\/[^/]+\/)memories\/(.+)$/);
17
- if (match) {
18
- return (`${match[1]}memory/records/${match[2]}`);
19
- }
20
- match =
21
- key.match(/^(projects\/[^/]+\/)vectors\/(.+)$/);
22
- if (match) {
23
- return (`${match[1]}memory/vectors/${match[2]}`);
24
- }
25
- match =
26
- key.match(/^(projects\/[^/]+\/)graph\/(.+)$/);
27
- if (match) {
28
- return (`${match[1]}code/graph/${match[2]}`);
29
- }
30
- /*
31
- * Historical snapshots
32
- */
33
- match =
34
- key.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)memories\/(.+)$/);
35
- if (match) {
36
- return (`${match[1]}memory/records/${match[2]}`);
37
- }
38
- match =
39
- key.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)vectors\/(.+)$/);
40
- if (match) {
41
- return (`${match[1]}memory/vectors/${match[2]}`);
42
- }
43
- match =
44
- key.match(/^(projects\/[^/]+\/snapshots\/[^/]+\/)graph\/(.+)$/);
45
- if (match) {
46
- return (`${match[1]}code/graph/${match[2]}`);
47
- }
48
- return null;
49
- }
50
- async function main() {
51
- const config = loadConfig();
52
- const storage = withStorageRetry(createStorageProvider({
53
- provider: config.storage.provider,
54
- huggingface: config.storage.huggingface,
55
- localRoot: config.storage.localRoot,
56
- }), {
57
- attempts: 3,
58
- });
59
- const objects = await storage.list("projects/");
60
- const migrations = objects
61
- .map((item) => ({
62
- from: item.key,
63
- to: destination(item.key),
64
- }))
65
- .filter((item) => Boolean(item.to) &&
66
- item.from !== item.to);
67
- console.log(`Objects to migrate: ${migrations.length}`);
68
- let copied = 0;
69
- let verified = 0;
70
- for (const item of migrations) {
71
- const source = await storage.getText(item.from);
72
- if (source === null ||
73
- source === undefined) {
74
- throw new Error(`Cannot read ${item.from}`);
75
- }
76
- console.log(`COPY\n ${item.from}\n -> ${item.to}`);
77
- await storage.put(item.to, source, "application/json");
78
- copied++;
79
- const target = await storage.getText(item.to);
80
- if (target === null ||
81
- target === undefined) {
82
- throw new Error(`Cannot verify ${item.to}`);
83
- }
84
- if (sha(source) !==
85
- sha(target)) {
86
- throw new Error(`Checksum mismatch:\n${item.from}\n${item.to}`);
87
- }
88
- verified++;
89
- }
90
- console.log({
91
- ok: true,
92
- copied,
93
- verified,
94
- deleted: 0,
95
- message: "Old objects intentionally preserved until build/tests pass.",
96
- });
97
- }
98
- main().catch((error) => {
99
- console.error(error);
100
- process.exit(1);
101
- });
@@ -1,73 +0,0 @@
1
- import "dotenv/config";
2
- import { loadConfig, ProjectManager, } from "../../core/index.js";
3
- import { createStorageProvider, withStorageRetry, } from "../index.js";
4
- import { sanitizeProjectFolder, } from "./folder.js";
5
- async function main() {
6
- const config = loadConfig();
7
- const project = new ProjectManager()
8
- .detect();
9
- const storage = withStorageRetry(createStorageProvider({
10
- provider: config.storage.provider,
11
- huggingface: config.storage.huggingface,
12
- localRoot: config.storage.localRoot,
13
- }), {
14
- attempts: 3,
15
- });
16
- const folder = sanitizeProjectFolder(project.name);
17
- const oldPrefix = `projects/${project.id}`;
18
- const newPrefix = `projects/${folder}`;
19
- if (oldPrefix ===
20
- newPrefix) {
21
- console.log({
22
- ok: true,
23
- migrated: 0,
24
- folder,
25
- message: "Already using named project folder",
26
- });
27
- return;
28
- }
29
- const objects = await storage.list(oldPrefix);
30
- let migrated = 0;
31
- for (const object of objects) {
32
- const data = await storage.get(object.key);
33
- if (!data) {
34
- continue;
35
- }
36
- const newKey = newPrefix +
37
- object.key.slice(oldPrefix.length);
38
- await storage.put(newKey, data, "application/json");
39
- migrated++;
40
- }
41
- /*
42
- * Project metadata dễ đọc.
43
- */
44
- await storage.put(`${newPrefix}/project.json`, JSON.stringify({
45
- version: 1,
46
- projectId: project.id,
47
- projectName: project.name,
48
- storageFolder: folder,
49
- migratedAt: new Date()
50
- .toISOString(),
51
- }, null, 2), "application/json");
52
- /*
53
- * Chỉ xoá folder hash sau khi copy xong.
54
- */
55
- if (migrated > 0) {
56
- for (const object of objects) {
57
- await storage.delete(object.key);
58
- }
59
- }
60
- console.log({
61
- ok: true,
62
- project: project.name,
63
- projectId: project.id,
64
- folder,
65
- migrated,
66
- from: oldPrefix,
67
- to: newPrefix,
68
- });
69
- }
70
- main().catch((error) => {
71
- console.error(error);
72
- process.exit(1);
73
- });