toolnet-memory 0.2.1 → 0.2.3

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 (342) hide show
  1. package/README.md +55 -28
  2. package/bin/toolnet-memory +55 -55
  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 +9 -6
  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/setup.js +0 -219
  199. package/dist/src/production/snapshot-cli.js +0 -58
  200. package/dist/src/project-manual/cli.js +0 -77
  201. package/dist/src/project-manual/index.js +0 -2
  202. package/dist/src/project-manual/manager.js +0 -147
  203. package/dist/src/project-manual/types.js +0 -1
  204. package/dist/src/retrieval/bm25/index.js +0 -1
  205. package/dist/src/retrieval/bm25/search.js +0 -1
  206. package/dist/src/retrieval/bm25.js +0 -30
  207. package/dist/src/retrieval/context-budget.js +0 -1
  208. package/dist/src/retrieval/context-builder.js +0 -22
  209. package/dist/src/retrieval/graph/index.js +0 -1
  210. package/dist/src/retrieval/graph/search.js +0 -1
  211. package/dist/src/retrieval/hybrid/hybrid-search.js +0 -1
  212. package/dist/src/retrieval/hybrid/index.js +0 -1
  213. package/dist/src/retrieval/hybrid-search.js +0 -68
  214. package/dist/src/retrieval/importance.js +0 -16
  215. package/dist/src/retrieval/index.js +0 -12
  216. package/dist/src/retrieval/query-analyzer.js +0 -32
  217. package/dist/src/retrieval/query-classifier.js +0 -1
  218. package/dist/src/retrieval/query-expansion.js +0 -1
  219. package/dist/src/retrieval/recency.js +0 -12
  220. package/dist/src/retrieval/reranker/index.js +0 -1
  221. package/dist/src/retrieval/reranker/reranker.js +0 -1
  222. package/dist/src/retrieval/retrieval-engine.js +0 -17
  223. package/dist/src/retrieval/tokenizer.js +0 -9
  224. package/dist/src/retrieval/type-priority.js +0 -10
  225. package/dist/src/retrieval/types.js +0 -1
  226. package/dist/src/retrieval/vector/index.js +0 -4
  227. package/dist/src/retrieval/vector/metadata-filter.js +0 -1
  228. package/dist/src/retrieval/vector/persistence.js +0 -67
  229. package/dist/src/retrieval/vector/search.js +0 -12
  230. package/dist/src/retrieval/vector/test-persistence.js +0 -36
  231. package/dist/src/retrieval/vector/upsert.js +0 -40
  232. package/dist/src/retrieval/vector/vector-store.js +0 -89
  233. package/dist/src/retrieval/vector-hybrid-engine.js +0 -91
  234. package/dist/src/runtime/bootstrap.js +0 -28
  235. package/dist/src/runtime/graceful.js +0 -17
  236. package/dist/src/runtime/index.js +0 -3
  237. package/dist/src/runtime/toolnet-memory-runtime.js +0 -156
  238. package/dist/src/security/encryption.js +0 -1
  239. package/dist/src/security/file-filter.js +0 -30
  240. package/dist/src/security/index.js +0 -3
  241. package/dist/src/security/sanitizer.js +0 -49
  242. package/dist/src/security/secret-scanner.js +0 -56
  243. package/dist/src/session/agy/adapter.js +0 -159
  244. package/dist/src/session/agy/cli.js +0 -87
  245. package/dist/src/session/agy/hook-installer.js +0 -62
  246. package/dist/src/session/agy/hook.js +0 -167
  247. package/dist/src/session/agy/index.js +0 -5
  248. package/dist/src/session/agy/project-resolver.js +0 -27
  249. package/dist/src/session/agy/recovery.js +0 -112
  250. package/dist/src/session/agy/transcript.js +0 -191
  251. package/dist/src/session/codex/adapter.js +0 -138
  252. package/dist/src/session/codex/cli.js +0 -236
  253. package/dist/src/session/codex/context-hook-installer.js +0 -70
  254. package/dist/src/session/codex/context-hook.js +0 -69
  255. package/dist/src/session/codex/discovery.js +0 -138
  256. package/dist/src/session/codex/index.js +0 -6
  257. package/dist/src/session/codex/notify-installer.js +0 -135
  258. package/dist/src/session/codex/project-resolver.js +0 -25
  259. package/dist/src/session/codex/recovery.js +0 -27
  260. package/dist/src/session/codex/rollout.js +0 -186
  261. package/dist/src/session/core.js +0 -239
  262. package/dist/src/session/identity.js +0 -57
  263. package/dist/src/session/index.js +0 -9
  264. package/dist/src/session/learner/cli.js +0 -62
  265. package/dist/src/session/learner/extractor.js +0 -461
  266. package/dist/src/session/learner/index.js +0 -4
  267. package/dist/src/session/learner/journal.js +0 -159
  268. package/dist/src/session/learner/learner.js +0 -124
  269. package/dist/src/session/learner/types.js +0 -1
  270. package/dist/src/session/opencode/adapter.js +0 -553
  271. package/dist/src/session/opencode/cli.js +0 -121
  272. package/dist/src/session/opencode/index.js +0 -2
  273. package/dist/src/session/opencode/plugin-installer.js +0 -230
  274. package/dist/src/session/store.js +0 -242
  275. package/dist/src/session/types.js +0 -1
  276. package/dist/src/session/utils.js +0 -47
  277. package/dist/src/session/wal.js +0 -303
  278. package/dist/src/snapshot/index.js +0 -2
  279. package/dist/src/snapshot/manager.js +0 -130
  280. package/dist/src/snapshot/test-snapshot.js +0 -28
  281. package/dist/src/snapshot/types.js +0 -1
  282. package/dist/src/storage/architecture-store.js +0 -37
  283. package/dist/src/storage/cleanup-health.js +0 -20
  284. package/dist/src/storage/code-analysis-store.js +0 -35
  285. package/dist/src/storage/code-chunk-store.js +0 -25
  286. package/dist/src/storage/code-graph-store.js +0 -24
  287. package/dist/src/storage/code-manifest-store.js +0 -24
  288. package/dist/src/storage/code-vector-store.js +0 -25
  289. package/dist/src/storage/github/client.js +0 -1
  290. package/dist/src/storage/github/index.js +0 -1
  291. package/dist/src/storage/google-drive/client.js +0 -1
  292. package/dist/src/storage/google-drive/index.js +0 -1
  293. package/dist/src/storage/huggingface/client.js +0 -116
  294. package/dist/src/storage/huggingface/index.js +0 -1
  295. package/dist/src/storage/index.js +0 -16
  296. package/dist/src/storage/list-bucket-raw.js +0 -14
  297. package/dist/src/storage/list-bucket-tree.js +0 -38
  298. package/dist/src/storage/local/client.js +0 -99
  299. package/dist/src/storage/local/index.js +0 -1
  300. package/dist/src/storage/memory-store.js +0 -30
  301. package/dist/src/storage/project/cleanup-layout-v1.js +0 -72
  302. package/dist/src/storage/project/folder.js +0 -15
  303. package/dist/src/storage/project/index.js +0 -3
  304. package/dist/src/storage/project/layout.js +0 -74
  305. package/dist/src/storage/project/migrate-layout-v2.js +0 -101
  306. package/dist/src/storage/project/migrate.js +0 -73
  307. package/dist/src/storage/project/scoped-provider.js +0 -165
  308. package/dist/src/storage/provider.js +0 -26
  309. package/dist/src/storage/retrying-provider.js +0 -23
  310. package/dist/src/storage/test-connection.js +0 -32
  311. package/dist/src/storage/type-resolution-store.js +0 -26
  312. package/dist/src/storage/types.js +0 -1
  313. package/dist/src/storage/vector-store.js +0 -30
  314. package/dist/src/storage/visualization-store.js +0 -25
  315. package/dist/src/sync/compressor.js +0 -1
  316. package/dist/src/sync/conflict-resolver.js +0 -1
  317. package/dist/src/sync/downloader.js +0 -1
  318. package/dist/src/sync/index.js +0 -1
  319. package/dist/src/sync/sync-engine.js +0 -1
  320. package/dist/src/sync/upload-queue.js +0 -1
  321. package/dist/src/utils/retry.js +0 -29
  322. package/dist/src/visualization/server.js +0 -270
  323. package/dist/src/work-continuity/brief-cache.js +0 -107
  324. package/dist/src/work-continuity/brief.js +0 -349
  325. package/dist/src/work-continuity/cli.js +0 -96
  326. package/dist/src/work-continuity/context-cli.js +0 -106
  327. package/dist/src/work-continuity/context-runtime-cli.js +0 -88
  328. package/dist/src/work-continuity/extractor.js +0 -339
  329. package/dist/src/work-continuity/handoff.js +0 -185
  330. package/dist/src/work-continuity/index.js +0 -14
  331. package/dist/src/work-continuity/injection.js +0 -84
  332. package/dist/src/work-continuity/journal.js +0 -49
  333. package/dist/src/work-continuity/learner.js +0 -127
  334. package/dist/src/work-continuity/reducer.js +0 -316
  335. package/dist/src/work-continuity/semantic-extractor.js +0 -360
  336. package/dist/src/work-continuity/semantic-journal.js +0 -55
  337. package/dist/src/work-continuity/semantic-learner.js +0 -125
  338. package/dist/src/work-continuity/semantic-reducer.js +0 -268
  339. package/dist/src/work-continuity/semantic-types.js +0 -1
  340. package/dist/src/work-continuity/types.js +0 -1
  341. package/dist/visualization/public/index.html +0 -2896
  342. package/dist/visualization/public/vendor/3d-force-graph.min.js +0 -5
@@ -1,30 +0,0 @@
1
- import { basename, } from "node:path";
2
- const BLOCKED_NAMES = new Set([
3
- ".env",
4
- ".env.local",
5
- ".env.production",
6
- ".env.development",
7
- "id_rsa",
8
- "id_ed25519",
9
- "credentials",
10
- "credentials.json",
11
- "service-account.json",
12
- ]);
13
- const BLOCKED_EXTENSIONS = new Set([
14
- ".pem",
15
- ".key",
16
- ".p12",
17
- ".pfx",
18
- ]);
19
- export function isSensitiveFile(filePath) {
20
- const name = basename(filePath).toLowerCase();
21
- if (BLOCKED_NAMES.has(name)) {
22
- return true;
23
- }
24
- for (const extension of BLOCKED_EXTENSIONS) {
25
- if (name.endsWith(extension)) {
26
- return true;
27
- }
28
- }
29
- return false;
30
- }
@@ -1,3 +0,0 @@
1
- export * from "./secret-scanner.js";
2
- export * from "./sanitizer.js";
3
- export * from "./file-filter.js";
@@ -1,49 +0,0 @@
1
- import { SecretScanner } from "./secret-scanner.js";
2
- export class Sanitizer {
3
- scanner = new SecretScanner();
4
- sanitize(text) {
5
- let output = text;
6
- const matches = this.scanner.scan(text);
7
- const secretTypes = new Set();
8
- for (const match of matches) {
9
- secretTypes.add(match.type);
10
- output = output
11
- .split(match.value)
12
- .join(`[REDACTED:${match.type}]`);
13
- }
14
- return {
15
- text: output,
16
- redacted: matches.length,
17
- secretTypes: [...secretTypes],
18
- };
19
- }
20
- sanitizeValue(value) {
21
- if (typeof value === "string") {
22
- return this.sanitize(value).text;
23
- }
24
- if (Array.isArray(value)) {
25
- return value.map((item) => this.sanitizeValue(item));
26
- }
27
- if (value &&
28
- typeof value === "object") {
29
- const output = {};
30
- for (const [key, item] of Object.entries(value)) {
31
- const normalized = key.toLowerCase();
32
- if (normalized.includes("password") ||
33
- normalized.includes("secret") ||
34
- normalized.includes("token") ||
35
- normalized.includes("cookie") ||
36
- normalized.includes("authorization")) {
37
- output[key] =
38
- "[REDACTED]";
39
- }
40
- else {
41
- output[key] =
42
- this.sanitizeValue(item);
43
- }
44
- }
45
- return output;
46
- }
47
- return value;
48
- }
49
- }
@@ -1,56 +0,0 @@
1
- const PATTERNS = [
2
- {
3
- type: "openai_key",
4
- regex: /\bsk-[A-Za-z0-9_\-]{20,}\b/g,
5
- },
6
- {
7
- type: "huggingface_token",
8
- regex: /\bhf_[A-Za-z0-9]{20,}\b/g,
9
- },
10
- {
11
- type: "hf_s3_access_key",
12
- regex: /\bHFAK[A-Za-z0-9]{8,}\b/g,
13
- },
14
- {
15
- type: "bearer_token",
16
- regex: /\bBearer\s+[A-Za-z0-9._\-]{16,}\b/gi,
17
- },
18
- {
19
- type: "jwt",
20
- regex: /\beyJ[A-Za-z0-9_\-]{8,}\.[A-Za-z0-9_\-]{8,}\.[A-Za-z0-9_\-]{8,}\b/g,
21
- },
22
- {
23
- type: "private_key",
24
- regex: /-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/g,
25
- },
26
- {
27
- type: "password_assignment",
28
- regex: /\b(password|passwd|pwd)\s*[:=]\s*["']?[^"'\s]{6,}["']?/gi,
29
- },
30
- {
31
- type: "secret_assignment",
32
- regex: /\b(secret|api[_-]?key|access[_-]?token|refresh[_-]?token)\s*[:=]\s*["']?[^"'\s]{8,}["']?/gi,
33
- },
34
- {
35
- type: "cookie",
36
- regex: /\b(cookie|set-cookie)\s*[:=]\s*[^;\n]{8,}/gi,
37
- },
38
- ];
39
- export class SecretScanner {
40
- scan(text) {
41
- const matches = [];
42
- for (const pattern of PATTERNS) {
43
- const regex = new RegExp(pattern.regex.source, pattern.regex.flags);
44
- for (const match of text.matchAll(regex)) {
45
- matches.push({
46
- type: pattern.type,
47
- value: match[0],
48
- });
49
- }
50
- }
51
- return matches;
52
- }
53
- hasSecrets(text) {
54
- return this.scan(text).length > 0;
55
- }
56
- }
@@ -1,159 +0,0 @@
1
- import { existsSync, } from "node:fs";
2
- import { homedir, } from "node:os";
3
- import { join, resolve, } from "node:path";
4
- import { SessionCore, } from "../core.js";
5
- import { readAgyTranscript, } from "./transcript.js";
6
- function expandHome(value) {
7
- if (value === "~") {
8
- return homedir();
9
- }
10
- if (value.startsWith("~/")) {
11
- return join(homedir(), value.slice(2));
12
- }
13
- return value;
14
- }
15
- export async function syncAgySession(options) {
16
- const conversationId = options
17
- .conversationId
18
- .trim();
19
- if (!conversationId) {
20
- throw new Error("Agy conversationId is required");
21
- }
22
- const transcriptPath = resolve(expandHome(options
23
- .transcriptPath));
24
- const core = new SessionCore({
25
- project: options.project,
26
- storage: options.storage,
27
- agent: "agy",
28
- nativeSessionId: conversationId,
29
- metadata: {
30
- source: "antigravity-hook",
31
- transcriptPath,
32
- workspacePaths: options
33
- .workspacePaths ??
34
- [],
35
- artifactDirectoryPath: options
36
- .artifactDirectoryPath,
37
- modelName: options.modelName,
38
- },
39
- });
40
- const state = core.status();
41
- const rawCursor = state
42
- .sourceCursors["agy.transcript.offset"];
43
- const offset = rawCursor
44
- ? Number(rawCursor)
45
- : 0;
46
- const transcript = readAgyTranscript(transcriptPath, {
47
- offset: Number.isFinite(offset)
48
- ? offset
49
- : 0,
50
- });
51
- const events = [];
52
- if (state.lastSequence ===
53
- 0) {
54
- events.push({
55
- type: "session_start",
56
- sourceEventId: `agy:${conversationId}:start`,
57
- data: {
58
- workspacePaths: options
59
- .workspacePaths ??
60
- [],
61
- transcriptPath,
62
- modelName: options.modelName,
63
- },
64
- provenance: {
65
- source: "antigravity-hook",
66
- sourcePath: transcriptPath,
67
- },
68
- });
69
- }
70
- if (transcript.reset) {
71
- events.push({
72
- type: "custom",
73
- sourceEventId: `agy:${conversationId}:transcript-reset:${transcript.nextOffset}`,
74
- data: {
75
- event: "transcript_reset",
76
- transcriptPath,
77
- },
78
- provenance: {
79
- source: "agy-transcript",
80
- sourcePath: transcriptPath,
81
- },
82
- });
83
- }
84
- events.push(...transcript.events);
85
- if (options.phase ===
86
- "stop") {
87
- if (options.error) {
88
- events.push({
89
- type: "error",
90
- sourceEventId: [
91
- "agy",
92
- conversationId,
93
- "stop-error",
94
- options
95
- .terminationReason ??
96
- "",
97
- transcript
98
- .nextOffset,
99
- ].join(":"),
100
- data: {
101
- error: options.error,
102
- terminationReason: options
103
- .terminationReason,
104
- fullyIdle: options
105
- .fullyIdle,
106
- },
107
- provenance: {
108
- source: "antigravity-stop-hook",
109
- },
110
- });
111
- }
112
- /*
113
- * Stop is NOT permanent SessionEnd.
114
- * The same conversation UUID may be resumed later.
115
- */
116
- if (options.fullyIdle) {
117
- events.push({
118
- type: "session_idle",
119
- sourceEventId: [
120
- "agy",
121
- conversationId,
122
- "idle",
123
- transcript
124
- .nextOffset,
125
- ].join(":"),
126
- data: {
127
- terminationReason: options
128
- .terminationReason,
129
- fullyIdle: true,
130
- },
131
- provenance: {
132
- source: "antigravity-stop-hook",
133
- },
134
- });
135
- }
136
- }
137
- const recorded = core.recordMany(events);
138
- core.setSourceCursor("agy.transcript.offset", transcript.nextOffset);
139
- if (options.phase) {
140
- core.setSourceCursor("agy.last.phase", options.phase);
141
- }
142
- const flushed = await core.flush();
143
- return {
144
- conversationId,
145
- imported: recorded.length,
146
- eventCount: flushed.eventCount,
147
- chunkCount: flushed.chunkCount,
148
- status: flushed.status,
149
- transcriptOffset: transcript
150
- .nextOffset,
151
- reset: transcript.reset,
152
- };
153
- }
154
- export function defaultAgyTranscript(conversationId) {
155
- return join(homedir(), ".gemini", "antigravity-cli", "brain", conversationId, ".system_generated", "logs", "transcript.jsonl");
156
- }
157
- export function agyTranscriptExists(conversationId) {
158
- return existsSync(defaultAgyTranscript(conversationId));
159
- }
@@ -1,87 +0,0 @@
1
- import { loadConfig, ProjectManager, } from "../../core/index.js";
2
- import { createStorageProvider, ProjectScopedStorageProvider, withStorageRetry, } from "../../storage/index.js";
3
- import { syncAgySession, } from "./adapter.js";
4
- import { installAgyHooks, } from "./hook-installer.js";
5
- import { recoverAgyProject, } from "./recovery.js";
6
- function after(args, flag) {
7
- const index = args.indexOf(flag);
8
- return index >= 0
9
- ? args[index + 1]
10
- : undefined;
11
- }
12
- function storageFor(project) {
13
- const config = loadConfig();
14
- const raw = withStorageRetry(createStorageProvider({
15
- provider: config.storage.provider,
16
- huggingface: config.storage
17
- .huggingface,
18
- localRoot: config.storage
19
- .localRoot,
20
- }), {
21
- attempts: 3,
22
- });
23
- return new ProjectScopedStorageProvider(raw, project.id, project.name, project.remote ??
24
- project.name);
25
- }
26
- async function main() {
27
- const [command = "help", ...args] = process.argv.slice(2);
28
- if (command ===
29
- "install-hooks") {
30
- const file = installAgyHooks({
31
- binary: after(args, "--bin"),
32
- });
33
- console.log(`✅ Agy hooks installed: ${file}`);
34
- return;
35
- }
36
- const projectPath = after(args, "--project") ??
37
- process.cwd();
38
- const project = new ProjectManager()
39
- .detect(projectPath);
40
- const storage = storageFor(project);
41
- if (command ===
42
- "sync") {
43
- const conversationId = args[0];
44
- const transcriptPath = after(args, "--transcript");
45
- if (!conversationId ||
46
- !transcriptPath) {
47
- throw new Error("Usage: sync <conversation-id> --transcript <path>");
48
- }
49
- const result = await syncAgySession({
50
- project,
51
- storage,
52
- conversationId,
53
- transcriptPath,
54
- phase: "recover",
55
- });
56
- console.log(JSON.stringify(result, null, 2));
57
- return;
58
- }
59
- if (command ===
60
- "recover") {
61
- const limit = Number(after(args, "--limit") ??
62
- 100);
63
- const results = await recoverAgyProject(project, storage, Number.isFinite(limit)
64
- ? limit
65
- : 100);
66
- console.log(JSON.stringify({
67
- project: project.name,
68
- sessions: results.length,
69
- imported: results.reduce((total, item) => total +
70
- item.imported, 0),
71
- }, null, 2));
72
- return;
73
- }
74
- console.log(`Agy Session Adapter
75
-
76
- Commands:
77
- install-hooks
78
- sync <conversation-id> --transcript <path>
79
- recover [--project PATH] [--limit N]
80
- `);
81
- }
82
- main().catch(error => {
83
- console.error(error instanceof Error
84
- ? error.message
85
- : error);
86
- process.exit(1);
87
- });
@@ -1,62 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
2
- import { homedir, } from "node:os";
3
- import { dirname, join, } from "node:path";
4
- function quote(value) {
5
- return `'${value.replace(/'/g, `'\\''`)}'`;
6
- }
7
- export function installAgyHooks(options = {}) {
8
- const hooksFile = options.hooksFile ??
9
- join(homedir(), ".gemini", "config", "hooks.json");
10
- mkdirSync(dirname(hooksFile), {
11
- recursive: true,
12
- });
13
- let root = {};
14
- if (existsSync(hooksFile)) {
15
- try {
16
- root =
17
- JSON.parse(readFileSync(hooksFile, "utf8"));
18
- }
19
- catch (error) {
20
- throw new Error(`Invalid existing Agy hooks.json: ${error instanceof Error
21
- ? error.message
22
- : String(error)}`);
23
- }
24
- }
25
- const binary = options.binary ??
26
- "toolnet-memory";
27
- const command = `${quote(binary)} session:agy-hook`;
28
- /*
29
- * Official Antigravity hook schema.
30
- * Stop = sync when one execution becomes idle.
31
- * It is intentionally NOT treated as permanent SessionEnd.
32
- */
33
- root["toolnet-memory"] = {
34
- enabled: true,
35
- PreInvocation: [
36
- {
37
- type: "command",
38
- command: `${command} pre`,
39
- timeout: 15,
40
- },
41
- ],
42
- PostInvocation: [
43
- {
44
- type: "command",
45
- command: `${command} post`,
46
- timeout: 15,
47
- },
48
- ],
49
- Stop: [
50
- {
51
- type: "command",
52
- command: `${command} stop`,
53
- timeout: 30,
54
- },
55
- ],
56
- };
57
- writeFileSync(hooksFile, JSON.stringify(root, null, 2) + "\n", {
58
- encoding: "utf8",
59
- mode: 0o600,
60
- });
61
- return hooksFile;
62
- }
@@ -1,167 +0,0 @@
1
- import { loadConfig, } from "../../core/index.js";
2
- import { createStorageProvider, ProjectScopedStorageProvider, withStorageRetry, } from "../../storage/index.js";
3
- import { buildAgyPreInvocationOutput, refreshStartupBriefCache, } from "../../work-continuity/index.js";
4
- import { findToolNetProject, } from "./project-resolver.js";
5
- import { syncAgySession, } from "./adapter.js";
6
- async function readStdin() {
7
- let content = "";
8
- for await (const chunk of process.stdin) {
9
- content +=
10
- chunk.toString();
11
- }
12
- if (!content.trim()) {
13
- return {};
14
- }
15
- try {
16
- return JSON.parse(content);
17
- }
18
- catch {
19
- return {};
20
- }
21
- }
22
- function strings(value) {
23
- if (!Array.isArray(value)) {
24
- return [];
25
- }
26
- return value.filter(item => typeof item ===
27
- "string");
28
- }
29
- async function main() {
30
- const phase = (process.argv[2] ??
31
- "post");
32
- const input = await readStdin();
33
- const conversationId = typeof input
34
- .conversationId ===
35
- "string"
36
- ? input
37
- .conversationId
38
- : "";
39
- const transcriptPath = typeof input
40
- .transcriptPath ===
41
- "string"
42
- ? input
43
- .transcriptPath
44
- : "";
45
- const workspacePaths = strings(input.workspacePaths);
46
- const project = findToolNetProject(workspacePaths);
47
- let hookOutput = {};
48
- if (project &&
49
- conversationId) {
50
- try {
51
- const config = loadConfig();
52
- const raw = withStorageRetry(createStorageProvider({
53
- provider: config.storage
54
- .provider,
55
- huggingface: config.storage
56
- .huggingface,
57
- localRoot: config.storage
58
- .localRoot,
59
- }), {
60
- attempts: 2,
61
- });
62
- const storage = new ProjectScopedStorageProvider(raw, project.id, project.name, project.remote ??
63
- project.name);
64
- /*
65
- * Session capture remains independent from context
66
- * injection. One failure cannot break the other.
67
- */
68
- if (transcriptPath) {
69
- try {
70
- await syncAgySession({
71
- project,
72
- storage,
73
- conversationId,
74
- transcriptPath,
75
- workspacePaths,
76
- artifactDirectoryPath: typeof input
77
- .artifactDirectoryPath ===
78
- "string"
79
- ? input
80
- .artifactDirectoryPath
81
- : undefined,
82
- modelName: typeof input
83
- .modelName ===
84
- "string"
85
- ? input
86
- .modelName
87
- : undefined,
88
- phase,
89
- fullyIdle: input.fullyIdle ===
90
- true,
91
- terminationReason: typeof input
92
- .terminationReason ===
93
- "string"
94
- ? input
95
- .terminationReason
96
- : undefined,
97
- error: typeof input.error ===
98
- "string" &&
99
- input.error
100
- ? input.error
101
- : undefined,
102
- });
103
- }
104
- catch {
105
- // Capture failure must not block Agy.
106
- }
107
- }
108
- if (phase ===
109
- "pre") {
110
- try {
111
- hookOutput =
112
- await buildAgyPreInvocationOutput({
113
- project,
114
- storage,
115
- conversationId,
116
- invocationNum: typeof input
117
- .invocationNum ===
118
- "number"
119
- ? input
120
- .invocationNum
121
- : undefined,
122
- });
123
- }
124
- catch {
125
- hookOutput =
126
- {};
127
- }
128
- }
129
- /*
130
- * End of one Agy execution:
131
- * publish the newest compact Startup Brief so another
132
- * agent/VPS can resume immediately.
133
- */
134
- if (phase ===
135
- "stop") {
136
- try {
137
- await refreshStartupBriefCache(project, storage, 900);
138
- }
139
- catch {
140
- // Optional derived cache.
141
- }
142
- }
143
- }
144
- catch {
145
- // ToolNet must never break Agy.
146
- }
147
- }
148
- if (phase ===
149
- "stop") {
150
- process.stdout.write(JSON.stringify({
151
- decision: "stop",
152
- }));
153
- return;
154
- }
155
- process.stdout.write(JSON.stringify(hookOutput));
156
- }
157
- main().catch(() => {
158
- if (process.argv[2] ===
159
- "stop") {
160
- process.stdout.write('{"decision":"stop"}');
161
- }
162
- else {
163
- process.stdout.write("{}");
164
- }
165
- process.exitCode =
166
- 0;
167
- });
@@ -1,5 +0,0 @@
1
- export * from "./transcript.js";
2
- export * from "./adapter.js";
3
- export * from "./project-resolver.js";
4
- export * from "./hook-installer.js";
5
- export * from "./recovery.js";
@@ -1,27 +0,0 @@
1
- import { existsSync, } from "node:fs";
2
- import { dirname, join, parse, resolve, } from "node:path";
3
- import { ProjectManager, } from "../../core/index.js";
4
- export function findToolNetProject(workspacePaths) {
5
- for (const workspace of workspacePaths) {
6
- let current = resolve(workspace);
7
- const root = parse(current).root;
8
- while (true) {
9
- if (existsSync(join(current, ".toolnet", "project.json"))) {
10
- return new ProjectManager()
11
- .detect(current);
12
- }
13
- if (current ===
14
- root) {
15
- break;
16
- }
17
- const parent = dirname(current);
18
- if (parent ===
19
- current) {
20
- break;
21
- }
22
- current =
23
- parent;
24
- }
25
- }
26
- return null;
27
- }