@memorax/memorax-code 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/bin/memorax-cli.mjs +28 -0
  4. package/bin/memorax-code-backend.mjs +4 -0
  5. package/bin/memorax-code-claude.mjs +4 -0
  6. package/bin/memorax-code-codex.mjs +4 -0
  7. package/bin/memorax-code-npm-preinstall.mjs +55 -0
  8. package/bin/memorax-code-plugin-postinstall.mjs +1236 -0
  9. package/bin/memorax-code.mjs +204 -0
  10. package/docs/configuration.md +232 -0
  11. package/docs/troubleshooting.md +179 -0
  12. package/lib/client-hook-runtime.mjs +32 -0
  13. package/lib/memorax-code-adapter-common/src/backend-connection.d.mts +111 -0
  14. package/lib/memorax-code-adapter-common/src/backend-connection.mjs +304 -0
  15. package/lib/memorax-code-adapter-common/src/clients/claude-command.mjs +38 -0
  16. package/lib/memorax-code-adapter-common/src/clients/codex-command.mjs +41 -0
  17. package/lib/memorax-code-adapter-common/src/clients/codex-plugin-artifact.d.mts +3 -0
  18. package/lib/memorax-code-adapter-common/src/clients/codex-plugin-artifact.mjs +38 -0
  19. package/lib/memorax-code-adapter-common/src/config-utils.d.mts +27 -0
  20. package/lib/memorax-code-adapter-common/src/config-utils.mjs +391 -0
  21. package/lib/memorax-code-adapter-common/src/hooks/capture-cwd-hook.mjs +137 -0
  22. package/lib/memorax-code-adapter-common/src/hooks/client-hook-launcher.mjs +324 -0
  23. package/lib/memorax-code-adapter-common/src/hooks/ensure-backend-runner.mjs +142 -0
  24. package/lib/memorax-code-adapter-common/src/hooks/hook-runtime-generation.d.mts +38 -0
  25. package/lib/memorax-code-adapter-common/src/hooks/hook-runtime-generation.mjs +501 -0
  26. package/lib/memorax-code-adapter-common/src/hooks/memory-skill-reminder-hook.mjs +277 -0
  27. package/lib/memorax-code-adapter-common/src/memorax-code-config-file.d.mts +28 -0
  28. package/lib/memorax-code-adapter-common/src/memorax-code-config-file.mjs +296 -0
  29. package/lib/memorax-code-adapter-common/src/memorax-defaults.d.mts +10 -0
  30. package/lib/memorax-code-adapter-common/src/memorax-defaults.mjs +12 -0
  31. package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-context.mjs +28 -0
  32. package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-marker.mjs +252 -0
  33. package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-supervisor.mjs +559 -0
  34. package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-worker.mjs +411 -0
  35. package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-update-policy-evaluator.mjs +185 -0
  36. package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-update-policy.mjs +165 -0
  37. package/lib/memorax-code-adapter-common/src/repo-memory/repo-procedure-memory-context.mjs +181 -0
  38. package/lib/memorax-code-adapter-common/src/repo-memory/repo-user-profile-context.mjs +251 -0
  39. package/lib/memorax-code-adapter-common/src/runtime-record.d.mts +55 -0
  40. package/lib/memorax-code-adapter-common/src/runtime-record.mjs +152 -0
  41. package/lib/memorax-code-adapter-common/src/windows-cli-invocation.mjs +100 -0
  42. package/lib/memorax-code-backend/dist/active-client-selection.js +35 -0
  43. package/lib/memorax-code-backend/dist/adapter-lifecycle-participant.js +1 -0
  44. package/lib/memorax-code-backend/dist/automatic-memory-retrieval.js +113 -0
  45. package/lib/memorax-code-backend/dist/automatic-memory-writeback.js +297 -0
  46. package/lib/memorax-code-backend/dist/backend-env.js +13 -0
  47. package/lib/memorax-code-backend/dist/backend-lifecycle-lock.js +42 -0
  48. package/lib/memorax-code-backend/dist/backend-process.js +147 -0
  49. package/lib/memorax-code-backend/dist/backend-service-cleanup.js +18 -0
  50. package/lib/memorax-code-backend/dist/backend-service-record.js +206 -0
  51. package/lib/memorax-code-backend/dist/backend-service-result.js +37 -0
  52. package/lib/memorax-code-backend/dist/backend-service-token.js +11 -0
  53. package/lib/memorax-code-backend/dist/backend-shutdown-request.js +133 -0
  54. package/lib/memorax-code-backend/dist/backend-state.js +58 -0
  55. package/lib/memorax-code-backend/dist/backend-status.js +53 -0
  56. package/lib/memorax-code-backend/dist/backend-token-record.js +79 -0
  57. package/lib/memorax-code-backend/dist/claude-adapter-lifecycle.js +134 -0
  58. package/lib/memorax-code-backend/dist/claude-local-transcript.js +648 -0
  59. package/lib/memorax-code-backend/dist/claude-memory-hook-runtime.js +472 -0
  60. package/lib/memorax-code-backend/dist/claude-transcript-turn.js +876 -0
  61. package/lib/memorax-code-backend/dist/client-plugin-removal.js +67 -0
  62. package/lib/memorax-code-backend/dist/client-selection.js +36 -0
  63. package/lib/memorax-code-backend/dist/codex-adapter-lifecycle.js +131 -0
  64. package/lib/memorax-code-backend/dist/codex-effective-prompt.js +54 -0
  65. package/lib/memorax-code-backend/dist/codex-memory-hook-runtime.js +541 -0
  66. package/lib/memorax-code-backend/dist/codex-plugin-hooks.js +421 -0
  67. package/lib/memorax-code-backend/dist/codex-plugin-install.js +523 -0
  68. package/lib/memorax-code-backend/dist/codex-rollout-turn.js +402 -0
  69. package/lib/memorax-code-backend/dist/codex-session-turn-index.js +88 -0
  70. package/lib/memorax-code-backend/dist/codex-workspace-links.js +55 -0
  71. package/lib/memorax-code-backend/dist/debug-log.js +21 -0
  72. package/lib/memorax-code-backend/dist/entrypoint.js +14 -0
  73. package/lib/memorax-code-backend/dist/incremental-jsonl-projection.js +271 -0
  74. package/lib/memorax-code-backend/dist/install-watchdog.js +71 -0
  75. package/lib/memorax-code-backend/dist/jsonl-append.js +75 -0
  76. package/lib/memorax-code-backend/dist/memorax-adapter.js +451 -0
  77. package/lib/memorax-code-backend/dist/memorax-cli.js +14 -0
  78. package/lib/memorax-code-backend/dist/memorax-code-config.js +279 -0
  79. package/lib/memorax-code-backend/dist/memorax-code-lifecycle.js +523 -0
  80. package/lib/memorax-code-backend/dist/memorax-code.js +3 -0
  81. package/lib/memorax-code-backend/dist/memorax-config.js +283 -0
  82. package/lib/memorax-code-backend/dist/memorax-http.js +142 -0
  83. package/lib/memorax-code-backend/dist/memory-cli.js +345 -0
  84. package/lib/memorax-code-backend/dist/memory-hook-command.js +200 -0
  85. package/lib/memorax-code-backend/dist/memory-observability.js +1 -0
  86. package/lib/memorax-code-backend/dist/memory-project.js +89 -0
  87. package/lib/memorax-code-backend/dist/memory-reminder-trace-recorder.js +58 -0
  88. package/lib/memorax-code-backend/dist/memory-service.js +66 -0
  89. package/lib/memorax-code-backend/dist/memory-turn-coordinator.js +139 -0
  90. package/lib/memorax-code-backend/dist/memory-viewer-activity.js +113 -0
  91. package/lib/memorax-code-backend/dist/memory-viewer-data-projection-cache.js +69 -0
  92. package/lib/memorax-code-backend/dist/memory-viewer-event-identity.js +3 -0
  93. package/lib/memorax-code-backend/dist/memory-viewer-history-projection.js +79 -0
  94. package/lib/memorax-code-backend/dist/memory-viewer-logo.js +1 -0
  95. package/lib/memorax-code-backend/dist/memory-viewer-observability.js +8 -0
  96. package/lib/memorax-code-backend/dist/memory-viewer-redaction.js +52 -0
  97. package/lib/memorax-code-backend/dist/memory-viewer-session-title.js +93 -0
  98. package/lib/memorax-code-backend/dist/memory-viewer-store.js +964 -0
  99. package/lib/memorax-code-backend/dist/memory-viewer-turn-reference.js +12 -0
  100. package/lib/memorax-code-backend/dist/memory-viewer-user-html.js +115 -0
  101. package/lib/memorax-code-backend/dist/memory-viewer-user-projection.js +168 -0
  102. package/lib/memorax-code-backend/dist/memory-viewer-writeback-status.js +97 -0
  103. package/lib/memorax-code-backend/dist/memory-writeback-buffer.js +217 -0
  104. package/lib/memorax-code-backend/dist/memory-writeback-chunk.js +120 -0
  105. package/lib/memorax-code-backend/dist/memory-writeback-reconciler.js +244 -0
  106. package/lib/memorax-code-backend/dist/memory-writeback-task-projection.js +377 -0
  107. package/lib/memorax-code-backend/dist/proxy-env.js +54 -0
  108. package/lib/memorax-code-backend/dist/repo-memory-readiness.js +188 -0
  109. package/lib/memorax-code-backend/dist/repository-memory-context.js +134 -0
  110. package/lib/memorax-code-backend/dist/repository-memory-scope.js +490 -0
  111. package/lib/memorax-code-backend/dist/server-cli.js +787 -0
  112. package/lib/memorax-code-backend/dist/server-health.js +16 -0
  113. package/lib/memorax-code-backend/dist/server-http.js +110 -0
  114. package/lib/memorax-code-backend/dist/server-json.js +4 -0
  115. package/lib/memorax-code-backend/dist/server-memory-hook.js +32 -0
  116. package/lib/memorax-code-backend/dist/server-memory-viewer.js +135 -0
  117. package/lib/memorax-code-backend/dist/server-observability.js +102 -0
  118. package/lib/memorax-code-backend/dist/server.js +220 -0
  119. package/lib/memorax-code-backend/dist/service-entrypoint.js +10 -0
  120. package/lib/memorax-code-backend/dist/service.js +567 -0
  121. package/lib/memorax-code-backend/dist/trace-config.js +112 -0
  122. package/lib/memorax-code-backend/dist/trace-context.js +111 -0
  123. package/lib/memorax-code-backend/dist/trace-store.js +571 -0
  124. package/lib/memorax-code-backend/dist/utils.js +3 -0
  125. package/lib/memorax-code-backend/dist/windows-cli-invocation.js +148 -0
  126. package/lib/memorax-code-backend/package.json +26 -0
  127. package/lib/memorax-code-claude-adapter/.claude-plugin/plugin.json +15 -0
  128. package/lib/memorax-code-claude-adapter/hooks/hook-launcher.mjs +27 -0
  129. package/lib/memorax-code-claude-adapter/hooks/hooks.json +66 -0
  130. package/lib/memorax-code-claude-adapter/hooks/repo-memory-job.mjs +37 -0
  131. package/lib/memorax-code-claude-adapter/hooks/runtime-hook.mjs +4 -0
  132. package/lib/memorax-code-claude-adapter/hooks/runtime-shell.json +5 -0
  133. package/lib/memorax-code-claude-adapter/package.json +13 -0
  134. package/lib/memorax-code-claude-adapter/runtime-hooks/capture-cwd.mjs +17 -0
  135. package/lib/memorax-code-claude-adapter/runtime-hooks/ensure-backend.mjs +59 -0
  136. package/lib/memorax-code-claude-adapter/runtime-hooks/memory-cli-session.mjs +33 -0
  137. package/lib/memorax-code-claude-adapter/runtime-hooks/memory-skill-reminder.mjs +73 -0
  138. package/lib/memorax-code-claude-adapter/runtime-hooks/memory-turn.mjs +91 -0
  139. package/lib/memorax-code-claude-adapter/scripts/build-marketplace.mjs +99 -0
  140. package/lib/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +83 -0
  141. package/lib/memorax-code-claude-adapter/skills/memorax-code/agents/claude.yaml +10 -0
  142. package/lib/memorax-code-claude-adapter/skills/memorax-code/agents/openai.yaml +7 -0
  143. package/lib/memorax-code-claude-adapter/skills/memorax-code/defaults.json +9 -0
  144. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +82 -0
  145. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +61 -0
  146. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/personal-read.md +46 -0
  147. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/personal-write.md +100 -0
  148. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-build.md +270 -0
  149. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-read.md +96 -0
  150. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-templates.md +270 -0
  151. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-update.md +116 -0
  152. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/collect_all.py +496 -0
  153. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/detect_updates.py +856 -0
  154. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
  155. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/github_resource_facets.py +504 -0
  156. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +509 -0
  157. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
  158. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
  159. package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/validate_memory.py +226 -0
  160. package/lib/memorax-code-claude-adapter/src/adapter-paths.mjs +46 -0
  161. package/lib/memorax-code-claude-adapter/src/cli.mjs +363 -0
  162. package/lib/memorax-code-claude-adapter/src/config-utils.mjs +1 -0
  163. package/lib/memorax-code-claude-adapter/src/config.mjs +544 -0
  164. package/lib/memorax-code-claude-adapter/src/plugin-artifact-contract.mjs +148 -0
  165. package/lib/memorax-code-claude-adapter/src/plugin-install.mjs +566 -0
  166. package/lib/memorax-code-claude-marketplace/.claude-plugin/marketplace.json +15 -0
  167. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/.claude-plugin/plugin.json +15 -0
  168. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/hook-launcher.mjs +27 -0
  169. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/hooks.json +66 -0
  170. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/repo-memory-job.mjs +37 -0
  171. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-hook.mjs +4 -0
  172. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-shell.json +5 -0
  173. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/backend-connection.d.mts +111 -0
  174. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/backend-connection.mjs +304 -0
  175. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/claude-command.mjs +38 -0
  176. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/codex-command.mjs +41 -0
  177. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/codex-plugin-artifact.d.mts +3 -0
  178. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/codex-plugin-artifact.mjs +38 -0
  179. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/config-utils.d.mts +27 -0
  180. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/config-utils.mjs +391 -0
  181. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/capture-cwd-hook.mjs +137 -0
  182. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/client-hook-launcher.mjs +324 -0
  183. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/ensure-backend-runner.mjs +142 -0
  184. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/hook-runtime-generation.d.mts +38 -0
  185. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/hook-runtime-generation.mjs +501 -0
  186. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/memory-skill-reminder-hook.mjs +277 -0
  187. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-code-config-file.d.mts +28 -0
  188. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-code-config-file.mjs +296 -0
  189. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-defaults.d.mts +10 -0
  190. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-defaults.mjs +12 -0
  191. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-job-context.mjs +28 -0
  192. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-job-marker.mjs +252 -0
  193. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-job-supervisor.mjs +559 -0
  194. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-job-worker.mjs +411 -0
  195. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-update-policy-evaluator.mjs +185 -0
  196. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-update-policy.mjs +165 -0
  197. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-procedure-memory-context.mjs +181 -0
  198. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-user-profile-context.mjs +251 -0
  199. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/runtime-record.d.mts +55 -0
  200. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/runtime-record.mjs +152 -0
  201. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/windows-cli-invocation.mjs +100 -0
  202. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/package.json +13 -0
  203. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/capture-cwd.mjs +17 -0
  204. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/ensure-backend.mjs +59 -0
  205. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-cli-session.mjs +33 -0
  206. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-skill-reminder.mjs +73 -0
  207. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-turn.mjs +91 -0
  208. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/scripts/build-marketplace.mjs +99 -0
  209. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +83 -0
  210. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/agents/claude.yaml +10 -0
  211. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/agents/openai.yaml +7 -0
  212. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/defaults.json +9 -0
  213. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +82 -0
  214. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +61 -0
  215. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/personal-read.md +46 -0
  216. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/personal-write.md +100 -0
  217. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-build.md +270 -0
  218. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-read.md +96 -0
  219. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-templates.md +270 -0
  220. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-update.md +116 -0
  221. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/collect_all.py +496 -0
  222. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/detect_updates.py +856 -0
  223. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
  224. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/github_resource_facets.py +504 -0
  225. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +509 -0
  226. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
  227. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
  228. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/validate_memory.py +226 -0
  229. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/adapter-paths.mjs +46 -0
  230. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/cli.mjs +363 -0
  231. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/config-utils.mjs +1 -0
  232. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/config.mjs +544 -0
  233. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/plugin-artifact-contract.mjs +148 -0
  234. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/plugin-install.mjs +566 -0
  235. package/lib/memorax-code-codex-adapter/.codex-plugin/plugin.json +33 -0
  236. package/lib/memorax-code-codex-adapter/assets/composer-icon.png +0 -0
  237. package/lib/memorax-code-codex-adapter/assets/logo.png +0 -0
  238. package/lib/memorax-code-codex-adapter/hooks/hook-launcher.mjs +26 -0
  239. package/lib/memorax-code-codex-adapter/hooks/hooks.json +61 -0
  240. package/lib/memorax-code-codex-adapter/hooks/repo-memory-job.mjs +38 -0
  241. package/lib/memorax-code-codex-adapter/hooks/repo-memory-update-policy.mjs +10 -0
  242. package/lib/memorax-code-codex-adapter/hooks/runtime-hook.mjs +4 -0
  243. package/lib/memorax-code-codex-adapter/hooks/runtime-shell.json +5 -0
  244. package/lib/memorax-code-codex-adapter/package.json +13 -0
  245. package/lib/memorax-code-codex-adapter/runtime-hooks/capture-cwd.mjs +18 -0
  246. package/lib/memorax-code-codex-adapter/runtime-hooks/ensure-backend.mjs +82 -0
  247. package/lib/memorax-code-codex-adapter/runtime-hooks/memory-skill-reminder.mjs +125 -0
  248. package/lib/memorax-code-codex-adapter/runtime-hooks/memory-writeback.mjs +52 -0
  249. package/lib/memorax-code-codex-adapter/skills/memorax-code/SKILL.md +83 -0
  250. package/lib/memorax-code-codex-adapter/skills/memorax-code/agents/claude.yaml +10 -0
  251. package/lib/memorax-code-codex-adapter/skills/memorax-code/agents/openai.yaml +7 -0
  252. package/lib/memorax-code-codex-adapter/skills/memorax-code/defaults.json +9 -0
  253. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-add.md +82 -0
  254. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-search.md +61 -0
  255. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/personal-read.md +46 -0
  256. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/personal-write.md +100 -0
  257. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-build.md +270 -0
  258. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-read.md +96 -0
  259. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-templates.md +270 -0
  260. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-update.md +116 -0
  261. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/collect_all.py +496 -0
  262. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/detect_updates.py +856 -0
  263. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
  264. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/github_resource_facets.py +504 -0
  265. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +509 -0
  266. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
  267. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
  268. package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/validate_memory.py +226 -0
  269. package/lib/memorax-code-codex-adapter/src/adapter-paths.mjs +29 -0
  270. package/lib/memorax-code-codex-adapter/src/cli.mjs +368 -0
  271. package/lib/memorax-code-codex-adapter/src/config-utils.mjs +1 -0
  272. package/lib/memorax-code-codex-adapter/src/config.mjs +226 -0
  273. package/lib/memorax-code-codex-adapter/src/session-registry.mjs +331 -0
  274. package/lib/memorax-code-codex-adapter/src/workspace-kind.mjs +68 -0
  275. package/lib/node-version.mjs +11 -0
  276. package/lib/npm-invocation.mjs +31 -0
  277. package/lib/resolve-claude-command.mjs +47 -0
  278. package/lib/resolve-codex-command.mjs +94 -0
  279. package/lib/run-entrypoint.mjs +83 -0
  280. package/lib/vscode-extension-command.mjs +119 -0
  281. package/lib/windows-cli-invocation.mjs +100 -0
  282. package/package.json +45 -0
@@ -0,0 +1,451 @@
1
+ import { MEMORAX_DEFAULT_MEMORY_OUTPUT_LANGUAGE, MEMORAX_PROVIDER_ID, clampInteger, memoraxAddOptionsFromContext, memoraxConfigFromEnv, parseScore, } from "./memorax-config.js";
2
+ import { getMemoraxJson, memoraxInvocationFailure, postMemoraxJson, } from "./memorax-http.js";
3
+ import { repositoryMemoryScopeKind, } from "./repository-memory-scope.js";
4
+ import { isRecord } from "./utils.js";
5
+ const SLOT_RESULT_SCHEMA_VERSION = "slot-invocation-result.preview.v1";
6
+ const FORWARDED_WRITEBACK_METADATA_KEYS = [
7
+ "memorax_code_memory_reason",
8
+ "memory_type",
9
+ "source_detail",
10
+ ];
11
+ export { memoraxConfigFromEnv } from "./memorax-config.js";
12
+ export async function invokeMemoraxMemoryProvider(run, request, options = {}) {
13
+ const configResult = options.config ? { ok: true, config: options.config } : memoraxConfigFromEnv(options.env);
14
+ if (!configResult.ok)
15
+ return { ok: false, error: configResult.error };
16
+ const config = configResult.config;
17
+ const providerId = request.provider_id?.trim() || MEMORAX_PROVIDER_ID;
18
+ if (providerId !== MEMORAX_PROVIDER_ID)
19
+ return { ok: false, error: `unsupported MemoraX provider id ${providerId}` };
20
+ const operation = request.operation;
21
+ if (operation !== "query" && operation !== "retrieve" && operation !== "writeback") {
22
+ return { ok: false, error: `unsupported MemoraX memory operation ${operation}` };
23
+ }
24
+ if (operation === "writeback") {
25
+ const repositoryScope = repositoryScopeForConfig(config, options.repositoryScope);
26
+ if (!repositoryScope.ok)
27
+ return repositoryScope;
28
+ return await invokeMemoraxWriteback(run, request, config, repositoryScope.scope, options);
29
+ }
30
+ const query = typeof request.query === "string" && request.query.trim()
31
+ ? request.query.trim()
32
+ : operation === "retrieve"
33
+ ? run.prompt.trim()
34
+ : "";
35
+ if (!query)
36
+ return { ok: false, error: "query is required" };
37
+ const context = isRecord(request.context) ? request.context : {};
38
+ const repositoryScope = repositoryScopeForConfig(config, options.repositoryScope);
39
+ if (!repositoryScope.ok)
40
+ return repositoryScope;
41
+ const payload = buildMemoraxSearchPayload(config, query, context, repositoryScope.scope);
42
+ try {
43
+ const raw = await callMemoSearch(config, payload, options.fetchImpl);
44
+ const items = extractMemoraxSearchItems(raw);
45
+ const contextBlocks = renderMemoraxContextBlocks(items, config);
46
+ const promptFragments = contextBlocks.map((block) => ({
47
+ slot: request.slot || "state_context",
48
+ content: block.content,
49
+ source: "memorax",
50
+ }));
51
+ recordMemoryObservabilityEvent(options, {
52
+ operation,
53
+ ok: true,
54
+ request: {
55
+ slot: request.slot || "state_context",
56
+ payload,
57
+ },
58
+ response: {
59
+ receiptId: memoraxReceiptId(raw),
60
+ items,
61
+ contextBlocks,
62
+ promptFragments,
63
+ buckets: extractMemoraxBuckets(raw),
64
+ },
65
+ });
66
+ return {
67
+ ok: true,
68
+ result: {
69
+ schema_version: SLOT_RESULT_SCHEMA_VERSION,
70
+ provider_family: "memory",
71
+ provider_id: providerId,
72
+ slot: request.slot || "state_context",
73
+ operation,
74
+ prompt_fragments: promptFragments,
75
+ tool_result_payload: {
76
+ answer: contextBlocks.map((block) => block.content).join("\n\n"),
77
+ items,
78
+ contextBlocks,
79
+ buckets: extractMemoraxBuckets(raw),
80
+ },
81
+ dispatch_receipt: {
82
+ accepted: true,
83
+ receipt_id: memoraxReceiptId(raw),
84
+ summary: `memorax ${operation} returned ${items.length} item(s)`,
85
+ },
86
+ },
87
+ };
88
+ }
89
+ catch (error) {
90
+ const failure = memoraxInvocationFailure(error);
91
+ recordMemoryObservabilityEvent(options, {
92
+ operation,
93
+ ok: false,
94
+ request: {
95
+ slot: request.slot || "state_context",
96
+ payload,
97
+ },
98
+ error: failure.error,
99
+ });
100
+ return failure;
101
+ }
102
+ }
103
+ export function memoraxSessionIdForRun(run) {
104
+ return run.branchId?.trim() || run.sessionId;
105
+ }
106
+ export function buildMemoraxSearchPayload(config, query, context, repositoryScope) {
107
+ const limit = typeof context.limit === "number" ? context.limit : undefined;
108
+ const minSemanticSimilarity = typeof context.min_semantic_similarity === "number"
109
+ ? parseScore(context.min_semantic_similarity)
110
+ : typeof context.min_score === "number"
111
+ ? parseScore(context.min_score)
112
+ : config.minScore;
113
+ const topK = clampInteger(limit ?? config.topK, 1, 100);
114
+ const kDense = typeof context.k_dense === "number" ? clampInteger(context.k_dense, 0, 100) : config.kDense ?? topK;
115
+ const kSparse = typeof context.k_sparse === "number" ? clampInteger(context.k_sparse, 0, 100) : config.kSparse ?? topK;
116
+ return {
117
+ query,
118
+ user_id: repositoryScope.effectiveUserId,
119
+ top_k: topK,
120
+ k_dense: kDense,
121
+ k_sparse: kSparse,
122
+ ...(isRecord(context.filters) ? { filters: context.filters } : {}),
123
+ ...(minSemanticSimilarity === undefined
124
+ ? {}
125
+ : { min_semantic_similarity: minSemanticSimilarity }),
126
+ };
127
+ }
128
+ export async function callMemoSearch(config, payload, fetchImpl = fetch) {
129
+ return postMemoraxJson(config, "/v1/memories/search", payload, fetchImpl);
130
+ }
131
+ export async function callMemoAdd(config, payload, fetchImpl = fetch) {
132
+ return postMemoraxJson(config, "/v1/memories/add", payload, fetchImpl);
133
+ }
134
+ export async function callMemoAddStatus(config, taskId, fetchImpl = fetch) {
135
+ return getMemoraxJson(config, `/v1/memories/add/status/${encodeURIComponent(taskId)}`, fetchImpl);
136
+ }
137
+ function recordMemoryObservabilityEvent(options, event) {
138
+ const observability = options.observability;
139
+ if (!observability?.recordEvent)
140
+ return;
141
+ const source = options.observabilitySource ?? "unknown";
142
+ const request = options.writebackAttempt && isRecord(event.request)
143
+ ? {
144
+ ...event.request,
145
+ attempt: options.writebackAttempt.attempt,
146
+ maxAttempts: options.writebackAttempt.maxAttempts,
147
+ }
148
+ : event.request;
149
+ try {
150
+ observability.recordEvent({
151
+ source,
152
+ ...(options.traceContext ? { traceContext: options.traceContext } : {}),
153
+ ...(options.relatedTurns?.length ? { relatedTurns: options.relatedTurns } : {}),
154
+ ...event,
155
+ ...(request === undefined ? {} : { request }),
156
+ });
157
+ }
158
+ catch (error) {
159
+ options.diagnosticLogger?.("memory_observability.record_failed", {
160
+ source,
161
+ operation: event.operation,
162
+ ok: event.ok,
163
+ error: error instanceof Error ? error.message : String(error),
164
+ });
165
+ }
166
+ }
167
+ export function extractMemoraxSearchItems(raw) {
168
+ if (Array.isArray(raw))
169
+ return raw;
170
+ if (!isRecord(raw))
171
+ return [];
172
+ const data = raw.data;
173
+ if (Array.isArray(data))
174
+ return data;
175
+ if (isRecord(data) && Array.isArray(data.data))
176
+ return data.data;
177
+ return [];
178
+ }
179
+ function extractMemoraxBuckets(raw) {
180
+ if (!isRecord(raw) || !isRecord(raw.data))
181
+ return null;
182
+ return raw.data.buckets ?? null;
183
+ }
184
+ async function invokeMemoraxWriteback(run, request, config, repositoryScope, options) {
185
+ const env = options.env ?? process.env;
186
+ const context = isRecord(request.context) ? request.context : {};
187
+ const messages = writebackMessagesFromContext(context, request.content);
188
+ if (messages.length === 0)
189
+ return { ok: false, error: "writeback messages are required" };
190
+ const idempotencyKey = writebackIdempotencyKeyFromContext(context);
191
+ if (!idempotencyKey)
192
+ return { ok: false, error: "writeback idempotency key is required" };
193
+ const addOptions = memoraxAddOptionsFromContext(context, env);
194
+ if (!addOptions.ok)
195
+ return { ok: false, error: addOptions.error };
196
+ const payload = buildMemoraxAddPayload(config, run, messages, context, idempotencyKey, repositoryScope, addOptions.options);
197
+ try {
198
+ const raw = await callMemoAdd(config, payload, options.fetchImpl);
199
+ recordMemoryObservabilityEvent(options, {
200
+ operation: "writeback",
201
+ ok: true,
202
+ request: {
203
+ slot: request.slot || "state_context",
204
+ payload,
205
+ },
206
+ response: {
207
+ receiptId: memoraxReceiptId(raw),
208
+ raw,
209
+ },
210
+ });
211
+ return {
212
+ ok: true,
213
+ result: {
214
+ schema_version: SLOT_RESULT_SCHEMA_VERSION,
215
+ provider_family: "memory",
216
+ provider_id: MEMORAX_PROVIDER_ID,
217
+ slot: request.slot || "state_context",
218
+ operation: "writeback",
219
+ prompt_fragments: [],
220
+ tool_result_payload: {
221
+ accepted: true,
222
+ receiptId: memoraxReceiptId(raw),
223
+ raw,
224
+ },
225
+ dispatch_receipt: {
226
+ accepted: true,
227
+ receipt_id: memoraxReceiptId(raw),
228
+ summary: `memorax writeback accepted ${messages.length} message(s)`,
229
+ },
230
+ },
231
+ };
232
+ }
233
+ catch (error) {
234
+ const failure = memoraxInvocationFailure(error);
235
+ recordMemoryObservabilityEvent(options, {
236
+ operation: "writeback",
237
+ ok: false,
238
+ request: {
239
+ slot: request.slot || "state_context",
240
+ payload,
241
+ },
242
+ error: failure.error,
243
+ });
244
+ return failure;
245
+ }
246
+ }
247
+ function buildMemoraxAddPayload(config, run, messages, context, idempotencyKey, repositoryScope, options = {}) {
248
+ const now = Date.now();
249
+ const extraMetadata = writebackMetadataFromContext(context);
250
+ const chunk = options.contentType === "code" && options.mode === "default"
251
+ ? writebackChunkFromContext(context)
252
+ : undefined;
253
+ let lastTimestamp = 0;
254
+ const stamped = messages.map((message, index) => {
255
+ let timestamp = Number.isFinite(message.timestamp) ? Number(message.timestamp) : now + index;
256
+ if (timestamp < 10_000_000_000)
257
+ timestamp = now + index;
258
+ if (timestamp <= lastTimestamp)
259
+ timestamp = lastTimestamp + 1;
260
+ lastTimestamp = timestamp;
261
+ return { role: message.role, content: message.content, timestamp };
262
+ });
263
+ const scopeKind = repositoryMemoryScopeKind(repositoryScope);
264
+ return {
265
+ messages: stamped,
266
+ user_id: repositoryScope.effectiveUserId,
267
+ memory_output_language: config.memoryOutputLanguage ?? MEMORAX_DEFAULT_MEMORY_OUTPUT_LANGUAGE,
268
+ ...(options.mode ? { mode: options.mode } : {}),
269
+ ...(options.contentType ? { content_type: options.contentType } : {}),
270
+ ...(chunk ? { chunk } : {}),
271
+ session_id: memoraxSessionIdForRun(run),
272
+ async_mode: true,
273
+ timestamp: stamped[0]?.timestamp ?? now,
274
+ metadata: {
275
+ source: "memorax-code",
276
+ tags: ["memorax-code"],
277
+ ...extraMetadata,
278
+ memorax_code_memory_scope: memoraxScopeVersion(scopeKind),
279
+ memorax_code_base_user_id: repositoryScope.baseUserId,
280
+ memorax_code_workspace: repositoryScope.repositorySlug,
281
+ idempotency_key: idempotencyKey,
282
+ memorax_code_session_id: run.sessionId,
283
+ ...(run.branchId ? { memorax_code_branch_id: run.branchId } : {}),
284
+ },
285
+ };
286
+ }
287
+ function memoraxScopeVersion(scopeKind) {
288
+ if (scopeKind === "git-repository")
289
+ return "repository-name.v1";
290
+ if (scopeKind === "codex-projectless")
291
+ return "codex-projectless.v1";
292
+ return "workspace-name.v1";
293
+ }
294
+ function writebackChunkFromContext(context) {
295
+ if (!isRecord(context.chunk))
296
+ return undefined;
297
+ const groupId = typeof context.chunk.group_id === "string" ? context.chunk.group_id.trim() : "";
298
+ const index = context.chunk.index;
299
+ const count = context.chunk.count;
300
+ if (!groupId || !Number.isInteger(index) || !Number.isInteger(count))
301
+ return undefined;
302
+ if (Number(index) < 0 || Number(count) < 2 || Number(index) >= Number(count))
303
+ return undefined;
304
+ return { group_id: groupId, index: Number(index), count: Number(count) };
305
+ }
306
+ function writebackIdempotencyKeyFromContext(context) {
307
+ return typeof context.idempotencyKey === "string" && context.idempotencyKey.trim()
308
+ ? context.idempotencyKey.trim()
309
+ : undefined;
310
+ }
311
+ function writebackMetadataFromContext(context) {
312
+ if (!isRecord(context.metadata))
313
+ return {};
314
+ const metadata = {};
315
+ for (const key of FORWARDED_WRITEBACK_METADATA_KEYS) {
316
+ const value = context.metadata[key];
317
+ if (typeof value === "string" && value.trim())
318
+ metadata[key] = value.trim().slice(0, 2000);
319
+ else if (typeof value === "number" && Number.isFinite(value))
320
+ metadata[key] = value;
321
+ else if (typeof value === "boolean")
322
+ metadata[key] = value;
323
+ }
324
+ return metadata;
325
+ }
326
+ function repositoryScopeForConfig(config, scope) {
327
+ if (!scope)
328
+ return { ok: false, error: "memory scope is required for MemoraX search/add" };
329
+ if (scope.baseUserId !== config.userId) {
330
+ return { ok: false, error: "memory scope base user id does not match MemoraX config" };
331
+ }
332
+ if (!scope.effectiveUserId.trim() || !scope.repositorySlug.trim()) {
333
+ return { ok: false, error: "memory scope is invalid" };
334
+ }
335
+ return { ok: true, scope };
336
+ }
337
+ function writebackMessagesFromContext(context, fallbackContent) {
338
+ const rawMessages = Array.isArray(context.messages) ? context.messages : [];
339
+ const messages = rawMessages
340
+ .map((message) => normalizeWritebackMessage(message))
341
+ .filter((message) => Boolean(message));
342
+ if (messages.length > 0)
343
+ return messages;
344
+ const content = typeof fallbackContent === "string" ? fallbackContent.trim() : "";
345
+ return content ? [{ role: "assistant", content }] : [];
346
+ }
347
+ function normalizeWritebackMessage(value) {
348
+ if (!isRecord(value))
349
+ return undefined;
350
+ const role = value.role === "user" || value.role === "assistant" ? value.role : undefined;
351
+ const content = typeof value.content === "string" ? value.content.trim() : "";
352
+ if (!role || !content)
353
+ return undefined;
354
+ const timestamp = typeof value.timestamp === "number" && Number.isFinite(value.timestamp) ? value.timestamp : undefined;
355
+ return { role, content, ...(timestamp === undefined ? {} : { timestamp }) };
356
+ }
357
+ function renderMemoraxContextBlocks(items, config) {
358
+ const renderedItems = items
359
+ .map((item) => ({ item, line: formatMemoryItemLine(item, config.maxItemChars), memoryType: memoryTypeForItem(item) }))
360
+ .filter((item) => item.line);
361
+ if (renderedItems.length === 0)
362
+ return [];
363
+ const lines = ["<memories>"];
364
+ if (config.renderByMemoryType) {
365
+ const buckets = new Map();
366
+ for (const type of config.memoryTypeOrder)
367
+ buckets.set(type, []);
368
+ for (const rendered of renderedItems) {
369
+ if (!buckets.has(rendered.memoryType))
370
+ buckets.set(rendered.memoryType, []);
371
+ buckets.get(rendered.memoryType)?.push(rendered.line);
372
+ }
373
+ for (const [type, typeLines] of buckets.entries()) {
374
+ if (typeLines.length === 0)
375
+ continue;
376
+ lines.push(` <facts memory_type="${escapeAttribute(type)}">`);
377
+ lines.push(...typeLines);
378
+ lines.push(" </facts>");
379
+ }
380
+ }
381
+ else {
382
+ lines.push(" <facts>");
383
+ lines.push(...renderedItems.map((item) => item.line));
384
+ lines.push(" </facts>");
385
+ }
386
+ lines.push("</memories>");
387
+ const content = truncate(lines.join("\n"), config.maxContextChars);
388
+ return [{ type: "memory_context", source: "memorax", content, itemCount: renderedItems.length }];
389
+ }
390
+ function memoraxReceiptId(raw) {
391
+ if (isRecord(raw)) {
392
+ const meta = isRecord(raw.meta) ? raw.meta : undefined;
393
+ const data = isRecord(raw.data) ? raw.data : undefined;
394
+ const id = meta?.request_id ?? data?.task_id;
395
+ if (typeof id === "string" && id.trim())
396
+ return `memorax:${id.trim()}`;
397
+ }
398
+ return `memorax:${Date.now()}`;
399
+ }
400
+ function formatMemoryItemLine(item, maxItemChars) {
401
+ const text = sanitizeInline(memoryTextForItem(item));
402
+ if (!text)
403
+ return "";
404
+ const time = memoryTimeForItem(item);
405
+ const prefix = time ? ` -[${time}] ` : " - ";
406
+ return `${prefix}${escapeText(truncate(text, maxItemChars))}`;
407
+ }
408
+ function memoryTextForItem(item) {
409
+ if (!isRecord(item))
410
+ return "";
411
+ for (const key of ["memory", "summary", "content", "text"]) {
412
+ const value = item[key];
413
+ if (typeof value === "string" && value.trim())
414
+ return value;
415
+ }
416
+ return "";
417
+ }
418
+ function memoryTypeForItem(item) {
419
+ if (!isRecord(item) || !isRecord(item.metadata))
420
+ return "unclassified";
421
+ const type = item.metadata.memory_type;
422
+ return typeof type === "string" && type.trim() ? type.trim().toLowerCase() : "unclassified";
423
+ }
424
+ function memoryTimeForItem(item) {
425
+ if (!isRecord(item))
426
+ return "";
427
+ return formatTime(item.updated_at ?? item.created_at);
428
+ }
429
+ function formatTime(value) {
430
+ if (value === undefined || value === null || value === "")
431
+ return "";
432
+ const date = new Date(typeof value === "string" && /^\d+$/.test(value.trim()) ? Number(value) : String(value));
433
+ if (Number.isNaN(date.getTime()))
434
+ return "";
435
+ const pad = (n) => String(n).padStart(2, "0");
436
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
437
+ }
438
+ function sanitizeInline(value) {
439
+ return value.replace(/\r?\n+/g, " ").replace(/\s{2,}/g, " ").trim();
440
+ }
441
+ function truncate(text, maxChars) {
442
+ if (!Number.isFinite(maxChars) || maxChars <= 0 || text.length <= maxChars)
443
+ return text;
444
+ return `${text.slice(0, maxChars)}...`;
445
+ }
446
+ function escapeAttribute(value) {
447
+ return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
448
+ }
449
+ function escapeText(value) {
450
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
451
+ }
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { runMemoryCli } from "./memory-cli.js";
3
+ runMemoryCli(process.argv.slice(2)).then((result) => {
4
+ if (!process.argv.includes("--json") && result.ok && result.action === "memory.search") {
5
+ console.log(result.answer?.trim() || "No memory context returned.");
6
+ }
7
+ else {
8
+ console.log(JSON.stringify(result, null, 2));
9
+ }
10
+ process.exit(result.ok ? 0 : 1);
11
+ }).catch((error) => {
12
+ console.error(error instanceof Error ? error.message : String(error));
13
+ process.exit(1);
14
+ });