@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,523 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { BackendConnectionAuthorityError } from "../../memorax-code-adapter-common/src/backend-connection.mjs";
7
+ import { RuntimeRecordError } from "../../memorax-code-adapter-common/src/runtime-record.mjs";
8
+ import { runBackendStatus } from "./backend-status.js";
9
+ import { readBackendServiceState, preflightBackendServiceStart, startBackendService, stopBackendService, } from "./service.js";
10
+ import { backendServiceHome, BackendLifecycleLockError, withBackendLifecycleLock, } from "./backend-lifecycle-lock.js";
11
+ import { seedMissingMemoraxCodeConfig } from "./memorax-config.js";
12
+ import { runProcessWithWindowsNpm } from "./windows-cli-invocation.js";
13
+ import { loadManagedClientsConfig, resolveManagedClients } from "./client-selection.js";
14
+ import { clearActiveManagedClients, readActiveManagedClients, writeActiveManagedClients } from "./active-client-selection.js";
15
+ import { codexAdapterLifecycle } from "./codex-adapter-lifecycle.js";
16
+ import { claudeAdapterLifecycle } from "./claude-adapter-lifecycle.js";
17
+ export async function collectMemoraxCodeStatus(backendUrl, backendToken, serviceOptions, argv) {
18
+ const clients = managedClientsFor(argv, serviceOptions, { preferActive: true });
19
+ let serviceState;
20
+ try {
21
+ serviceState = readBackendServiceState(serviceOptions);
22
+ }
23
+ catch (error) {
24
+ return {
25
+ ok: false,
26
+ action: "status",
27
+ backend: {
28
+ ok: false,
29
+ url: backendUrl,
30
+ error: error instanceof Error ? error.message : String(error),
31
+ ...runtimeRecordErrorFields(error),
32
+ },
33
+ };
34
+ }
35
+ const backend = await runBackendStatus(backendUrl, backendToken, serviceOptions.timeoutMs ?? 5000, serviceState
36
+ ? {
37
+ url: serviceState.url,
38
+ instanceId: serviceState.instanceId,
39
+ sessionHome: memoraxCodeHomeForService(serviceOptions),
40
+ }
41
+ : undefined);
42
+ const codexAdapter = clients.codex
43
+ ? await codexAdapterLifecycle.status({ argv, serviceOptions, backendUrl })
44
+ : undefined;
45
+ const claudeAdapter = clients.claude
46
+ ? await claudeAdapterLifecycle.status({ argv, serviceOptions, backendUrl })
47
+ : undefined;
48
+ const codexReady = codexAdapter ? isAdapterReady(codexAdapter) : true;
49
+ const claudeReady = claudeAdapter ? isAdapterReady(claudeAdapter) : true;
50
+ return {
51
+ ok: backend.ok
52
+ && codexReady
53
+ && (isOptionalUnconfiguredClaudeAdapter(claudeAdapter, codexAdapter) || claudeReady),
54
+ action: "status",
55
+ backend,
56
+ ...(codexAdapter ? { codexAdapter } : {}),
57
+ ...(claudeAdapter ? { claudeAdapter } : {}),
58
+ };
59
+ }
60
+ export async function startMemoraxCodeService(serviceOptions, argv, commitReadyState) {
61
+ return withMemoraxCodeLifecycleLock("start", serviceOptions, async () => {
62
+ const report = await startMemoraxCodeServiceLocked(serviceOptions, argv);
63
+ if (report.ok)
64
+ await commitReadyState?.(report);
65
+ return report;
66
+ });
67
+ }
68
+ async function startMemoraxCodeServiceLocked(serviceOptions, argv) {
69
+ const memoraxCodeHome = memoraxCodeHomeForService(serviceOptions);
70
+ let backendUrl;
71
+ try {
72
+ backendUrl = expectedBackendUrl(serviceOptions);
73
+ }
74
+ catch (error) {
75
+ return {
76
+ ok: false,
77
+ action: "start",
78
+ backend: {
79
+ ok: false,
80
+ action: "start",
81
+ error: error instanceof Error ? error.message : String(error),
82
+ ...runtimeRecordErrorFields(error),
83
+ },
84
+ };
85
+ }
86
+ const serviceStateFailure = backendServiceStatePreflight(serviceOptions, "start");
87
+ if (serviceStateFailure) {
88
+ return { ok: false, action: "start", backend: serviceStateFailure };
89
+ }
90
+ const config = loadManagedClientsConfig(memoraxCodeHome);
91
+ const clients = resolveManagedClients(argv, config);
92
+ const previousClients = readActiveManagedClients(memoraxCodeHome);
93
+ // A failed Backend ownership check must leave the active client generation
94
+ // and its conservative cleanup marker untouched.
95
+ const stopped = await stopBackendService(serviceOptions);
96
+ if (!stopped.ok) {
97
+ return {
98
+ ok: false,
99
+ action: "start",
100
+ backend: { ...stopped, action: "start" },
101
+ };
102
+ }
103
+ const deselectedCodex = previousClients?.codex && !clients.codex
104
+ ? await codexAdapterLifecycle.disable({ argv, serviceOptions })
105
+ : undefined;
106
+ const deselectedClaude = previousClients?.claude && !clients.claude
107
+ ? await claudeAdapterLifecycle.disable({ argv, serviceOptions })
108
+ : undefined;
109
+ if (deselectedCodex?.ok === false || deselectedClaude?.ok === false) {
110
+ return {
111
+ ok: false,
112
+ action: "start",
113
+ backend: await recoverBackendAfterStartPreparationFailure(serviceOptions, "adapter_disable_failed"),
114
+ ...(deselectedCodex ? { codexAdapter: deselectedCodex } : {}),
115
+ ...(deselectedClaude ? { claudeAdapter: deselectedClaude } : {}),
116
+ };
117
+ }
118
+ // The marker is a conservative cleanup scope, not a readiness signal. Persist
119
+ // it before later steps can fail so an unqualified stop/uninstall still
120
+ // restores every client integration that this start may touch.
121
+ try {
122
+ writeActiveManagedClients(memoraxCodeHome, clients);
123
+ await seedMissingMemoraxCodeConfig(memoraxCodeHomeForService(serviceOptions));
124
+ }
125
+ catch (error) {
126
+ return {
127
+ ok: false,
128
+ action: "start",
129
+ reason: "lifecycle_state_prepare_failed",
130
+ message: error instanceof Error ? error.message : String(error),
131
+ backend: await recoverBackendAfterStartPreparationFailure(serviceOptions, "lifecycle_state_prepare_failed"),
132
+ };
133
+ }
134
+ const codexAdapter = clients.codex
135
+ ? await codexAdapterLifecycle.prepareEnable({ argv, serviceOptions, backendUrl })
136
+ : undefined;
137
+ if (codexAdapter?.ok === false) {
138
+ return {
139
+ ok: false,
140
+ action: "start",
141
+ backend: await recoverBackendAfterStartPreparationFailure(serviceOptions, "codex_adapter_enable_failed"),
142
+ codexAdapter,
143
+ };
144
+ }
145
+ const claudeAdapter = clients.claude
146
+ ? await claudeAdapterLifecycle.prepareEnable({ argv, serviceOptions, backendUrl })
147
+ : undefined;
148
+ const backendStartOptions = {
149
+ ...serviceOptions,
150
+ claudeProjectsRoot: claudeProjectsRootForStart(argv, claudeAdapter),
151
+ };
152
+ const backend = await startBackendService(backendStartOptions);
153
+ if (!backend.ok) {
154
+ const disabled = codexAdapter
155
+ ? await codexAdapterLifecycle.disable({ argv, serviceOptions })
156
+ : undefined;
157
+ return {
158
+ ok: false,
159
+ action: "start",
160
+ backend,
161
+ ...(disabled ? { codexAdapter: disabled } : {}),
162
+ ...(claudeAdapter ? { claudeAdapter } : {}),
163
+ };
164
+ }
165
+ return {
166
+ ok: claudeAdapter?.ok !== false,
167
+ action: "start",
168
+ backend,
169
+ ...(codexAdapter ? { codexAdapter } : {}),
170
+ ...(claudeAdapter ? { claudeAdapter } : {}),
171
+ };
172
+ }
173
+ function claudeProjectsRootForStart(argv, claudeAdapter) {
174
+ if (claudeAdapter?.ok === false || claudeAdapter?.enabled !== true)
175
+ return false;
176
+ const claudeHome = argValue(argv, "--claude-home")?.trim()
177
+ || process.env.CLAUDE_CONFIG_DIR?.trim()
178
+ || process.env.CLAUDE_HOME?.trim()
179
+ || join(homedir(), ".claude");
180
+ return join(resolve(claudeHome), "projects");
181
+ }
182
+ function expectedBackendUrl(serviceOptions) {
183
+ return preflightBackendServiceStart(serviceOptions).url;
184
+ }
185
+ export async function stopMemoraxCodeService(serviceOptions, argv) {
186
+ return withMemoraxCodeLifecycleLock("stop", serviceOptions, () => stopMemoraxCodeServiceLocked(serviceOptions, argv));
187
+ }
188
+ async function stopMemoraxCodeServiceLocked(serviceOptions, argv) {
189
+ const context = memoraxCodeStopContext(serviceOptions, argv);
190
+ const execution = await executeMemoraxCodeStop(serviceOptions, argv, context);
191
+ if (execution.report.ok)
192
+ commitActiveManagedClients(context.memoraxCodeHome, execution.remainingClients);
193
+ return execution.report;
194
+ }
195
+ async function executeMemoraxCodeStop(serviceOptions, argv, context) {
196
+ const { activeClients, clients } = context;
197
+ const serviceStateFailure = backendServiceStatePreflight(serviceOptions, "stop");
198
+ if (serviceStateFailure) {
199
+ return {
200
+ report: {
201
+ ok: false,
202
+ action: "stop",
203
+ backend: serviceStateFailure,
204
+ },
205
+ remainingClients: activeClients,
206
+ };
207
+ }
208
+ const remaining = activeClients && hasExplicitClientSelection(argv)
209
+ ? {
210
+ codex: activeClients.codex && !clients.codex,
211
+ claude: activeClients.claude && !clients.claude,
212
+ }
213
+ : undefined;
214
+ const hasRemainingClients = remaining?.codex === true || remaining?.claude === true;
215
+ const backendOnlyStop = !clients.codex && !clients.claude;
216
+ const needsBackendStop = backendOnlyStop || !hasRemainingClients;
217
+ // A true partial stop keeps the shared Backend for remaining clients. Every
218
+ // other stop establishes Backend shutdown before mutating client state.
219
+ const stoppedBackend = needsBackendStop
220
+ ? await stopBackendService(serviceOptions)
221
+ : undefined;
222
+ if (stoppedBackend?.ok === false) {
223
+ return {
224
+ report: {
225
+ ok: false,
226
+ action: "stop",
227
+ backend: stoppedBackend,
228
+ },
229
+ remainingClients: activeClients,
230
+ };
231
+ }
232
+ const codexAdapter = clients.codex
233
+ ? await codexAdapterLifecycle.disable({ argv, serviceOptions })
234
+ : undefined;
235
+ const claudeAdapter = clients.claude
236
+ ? await claudeAdapterLifecycle.disable({ argv, serviceOptions })
237
+ : undefined;
238
+ const adaptersOk = codexAdapter?.ok !== false && claudeAdapter?.ok !== false;
239
+ const backend = stoppedBackend
240
+ ?? (adaptersOk
241
+ ? preservedBackendResult(serviceOptions, "active_clients_remaining")
242
+ : preservedBackendResult(serviceOptions, "adapter_disable_failed"));
243
+ const ok = backend.ok && codexAdapter?.ok !== false && claudeAdapter?.ok !== false;
244
+ return {
245
+ report: {
246
+ ok,
247
+ action: "stop",
248
+ backend,
249
+ ...(codexAdapter ? { codexAdapter } : {}),
250
+ ...(claudeAdapter ? { claudeAdapter } : {}),
251
+ },
252
+ remainingClients: remaining && hasRemainingClients ? remaining : undefined,
253
+ };
254
+ }
255
+ export async function restartMemoraxCodeService(serviceOptions, argv, commitReadyState) {
256
+ return withMemoraxCodeLifecycleLock("restart", serviceOptions, async () => {
257
+ const report = await restartMemoraxCodeServiceLocked(serviceOptions, argv);
258
+ if (report.ok)
259
+ await commitReadyState?.(report);
260
+ return report;
261
+ });
262
+ }
263
+ async function restartMemoraxCodeServiceLocked(serviceOptions, argv) {
264
+ try {
265
+ expectedBackendUrl(serviceOptions);
266
+ }
267
+ catch (error) {
268
+ return {
269
+ ok: false,
270
+ action: "restart",
271
+ backend: {
272
+ ok: false,
273
+ action: "restart",
274
+ error: error instanceof Error ? error.message : String(error),
275
+ ...runtimeRecordErrorFields(error),
276
+ },
277
+ };
278
+ }
279
+ const started = await startMemoraxCodeServiceLocked(serviceOptions, argv);
280
+ return { ...started, action: "restart" };
281
+ }
282
+ export async function uninstallMemoraxCodeService(serviceOptions, argv) {
283
+ return withMemoraxCodeLifecycleLock("uninstall", serviceOptions, () => uninstallMemoraxCodeServiceLocked(serviceOptions, argv));
284
+ }
285
+ async function uninstallMemoraxCodeServiceLocked(serviceOptions, argv) {
286
+ const context = memoraxCodeStopContext(serviceOptions, argv);
287
+ const { activeClients, clients, memoraxCodeHome } = context;
288
+ const configuredClients = managedClientsFor([], serviceOptions);
289
+ const canRemoveSharedPackage = includesManagedClients(clients, configuredClients)
290
+ && (!activeClients || includesManagedClients(clients, activeClients));
291
+ const stopExecution = await executeMemoraxCodeStop(serviceOptions, argv, context);
292
+ const stopped = stopExecution.report;
293
+ if (!stopped.ok) {
294
+ return {
295
+ ...stopped,
296
+ action: "uninstall",
297
+ npmPackageRemoval: skippedNpmPackageRemoval("lifecycle_stop_failed"),
298
+ removesPlugin: false,
299
+ removesUserState: false,
300
+ };
301
+ }
302
+ const codexPlugin = clients.codex
303
+ ? await codexAdapterLifecycle.remove({ argv, serviceOptions })
304
+ : undefined;
305
+ const claudePlugin = clients.claude
306
+ ? await claudeAdapterLifecycle.remove({ argv, serviceOptions })
307
+ : undefined;
308
+ const pluginCleanupOk = codexPlugin?.ok !== false
309
+ && claudePlugin?.ok !== false;
310
+ const npmPackageRemoval = !pluginCleanupOk
311
+ ? skippedNpmPackageRemoval("plugin_cleanup_failed")
312
+ : canRemoveSharedPackage
313
+ ? await removeNpmPackageIfInstalled(argv)
314
+ : skippedNpmPackageRemoval("partial_client_uninstall");
315
+ const claudeAdapter = stopped.claudeAdapter && claudePlugin
316
+ ? { ...stopped.claudeAdapter, pluginRemove: claudePlugin }
317
+ : stopped.claudeAdapter;
318
+ const ok = pluginCleanupOk && npmPackageRemoval.ok !== false;
319
+ if (ok)
320
+ commitActiveManagedClients(memoraxCodeHome, stopExecution.remainingClients);
321
+ return {
322
+ ...stopped,
323
+ ok,
324
+ action: "uninstall",
325
+ ...(codexPlugin ? { codexPlugin } : {}),
326
+ ...(claudeAdapter ? { claudeAdapter } : {}),
327
+ npmPackageRemoval,
328
+ removesPlugin: codexPlugin?.ok === true || claudePlugin?.ok === true,
329
+ removesUserState: false,
330
+ };
331
+ }
332
+ function skippedNpmPackageRemoval(reason) {
333
+ return { ok: true, action: "npm-package-remove", skipped: true, reason };
334
+ }
335
+ async function removeNpmPackageIfInstalled(argv) {
336
+ if (argv.includes("--no-npm-uninstall")) {
337
+ return { ok: true, action: "npm-package-remove", skipped: true, reason: "disabled_by_flag" };
338
+ }
339
+ const packageRoot = await currentNpmPackageRoot();
340
+ if (!packageRoot)
341
+ return { ok: true, action: "npm-package-remove", skipped: true, reason: "not_running_from_npm_package" };
342
+ const packageJson = await readPackageJson(packageRoot);
343
+ const packageName = typeof packageJson.name === "string" && packageJson.name.trim() ? packageJson.name : "@memorax/memorax-code";
344
+ const npmExecPath = nonEmptyString(process.env.MEMORAX_CODE_NPM_EXEC_PATH)
345
+ ? process.env.MEMORAX_CODE_NPM_EXEC_PATH
346
+ : process.env.npm_execpath;
347
+ const npmCommandOverride = nonEmptyString(process.env.MEMORAX_CODE_NPM_COMMAND) ? process.env.MEMORAX_CODE_NPM_COMMAND : undefined;
348
+ const directNpmEntrypoint = (npmExecPath
349
+ && existsSync(npmExecPath)
350
+ && (npmCommandOverride || process.platform !== "win32")) ? npmExecPath : undefined;
351
+ const npmCommand = npmCommandOverride ?? (directNpmEntrypoint ? process.execPath : "npm");
352
+ const npmArgs = directNpmEntrypoint
353
+ ? [directNpmEntrypoint, "uninstall", "-g", packageName]
354
+ : ["uninstall", "-g", packageName];
355
+ const result = await runProcessWithWindowsNpm(npmCommand, npmArgs, { cwd: homedir(), env: process.env });
356
+ return {
357
+ ok: result.ok,
358
+ action: "npm-package-remove",
359
+ packageRoot,
360
+ packageName,
361
+ stdout: result.stdout,
362
+ stderr: result.stderr,
363
+ ...(result.ok ? {} : { error: result.stderr || result.stdout || "npm uninstall failed" }),
364
+ };
365
+ }
366
+ async function currentNpmPackageRoot() {
367
+ const override = nonEmptyString(process.env.MEMORAX_CODE_NPM_PACKAGE_ROOT) ? resolve(process.env.MEMORAX_CODE_NPM_PACKAGE_ROOT) : undefined;
368
+ if (override && await isMemoraxCodeNpmPackageRoot(override))
369
+ return override;
370
+ let current = dirname(fileURLToPath(import.meta.url));
371
+ for (let depth = 0; depth < 6; depth += 1) {
372
+ if (await isMemoraxCodeNpmPackageRoot(current))
373
+ return current;
374
+ const parent = dirname(current);
375
+ if (parent === current)
376
+ break;
377
+ current = parent;
378
+ }
379
+ return undefined;
380
+ }
381
+ async function isMemoraxCodeNpmPackageRoot(dir) {
382
+ try {
383
+ const packageJson = await readPackageJson(dir);
384
+ const packageName = typeof packageJson.name === "string" ? packageJson.name : "";
385
+ return packageName.includes("memorax-code") && existsSync(join(dir, "bin", "memorax-code.mjs"));
386
+ }
387
+ catch {
388
+ return false;
389
+ }
390
+ }
391
+ async function readPackageJson(dir) {
392
+ const parsed = JSON.parse(await readFile(join(dir, "package.json"), "utf8"));
393
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
394
+ }
395
+ function managedClientsFor(argv, serviceOptions, options = {}) {
396
+ const memoraxCodeHome = memoraxCodeHomeForService(serviceOptions);
397
+ if (hasExplicitClientSelection(argv))
398
+ return resolveManagedClients(argv);
399
+ if (options.preferActive && !hasExplicitClientSelection(argv)) {
400
+ const active = readActiveManagedClients(memoraxCodeHome);
401
+ if (active)
402
+ return active;
403
+ }
404
+ return resolveManagedClients(argv, loadManagedClientsConfig(memoraxCodeHome));
405
+ }
406
+ function memoraxCodeStopContext(serviceOptions, argv) {
407
+ const memoraxCodeHome = memoraxCodeHomeForService(serviceOptions);
408
+ return {
409
+ memoraxCodeHome,
410
+ activeClients: readActiveManagedClients(memoraxCodeHome),
411
+ clients: managedClientsFor(argv, serviceOptions, { preferActive: true }),
412
+ };
413
+ }
414
+ function commitActiveManagedClients(memoraxCodeHome, clients) {
415
+ if (clients)
416
+ writeActiveManagedClients(memoraxCodeHome, clients);
417
+ else
418
+ clearActiveManagedClients(memoraxCodeHome);
419
+ }
420
+ function hasExplicitClientSelection(argv) {
421
+ return argv.includes("--clients");
422
+ }
423
+ function argValue(argv, name) {
424
+ const index = argv.indexOf(name);
425
+ return index >= 0 ? argv[index + 1] : undefined;
426
+ }
427
+ function includesManagedClients(selection, required) {
428
+ return (!required.codex || selection.codex) && (!required.claude || selection.claude);
429
+ }
430
+ function preservedBackendResult(serviceOptions, reason, action = "stop") {
431
+ const state = readBackendServiceState(serviceOptions);
432
+ return {
433
+ ok: true,
434
+ action,
435
+ skipped: true,
436
+ reason,
437
+ ...(state ? { state, alreadyRunning: true } : { alreadyRunning: false }),
438
+ };
439
+ }
440
+ async function recoverBackendAfterStartPreparationFailure(serviceOptions, reason) {
441
+ try {
442
+ const recovery = await startBackendService(serviceOptions);
443
+ return {
444
+ ...recovery,
445
+ action: "start",
446
+ reason: recovery.ok
447
+ ? `${reason}_backend_recovered`
448
+ : `${reason}_backend_recovery_failed`,
449
+ };
450
+ }
451
+ catch (error) {
452
+ return {
453
+ ok: false,
454
+ action: "start",
455
+ reason: `${reason}_backend_recovery_failed`,
456
+ error: error instanceof Error ? error.message : String(error),
457
+ };
458
+ }
459
+ }
460
+ function backendServiceStatePreflight(serviceOptions, action) {
461
+ try {
462
+ readBackendServiceState(serviceOptions);
463
+ return undefined;
464
+ }
465
+ catch (error) {
466
+ return {
467
+ ok: false,
468
+ action,
469
+ error: error instanceof Error ? error.message : String(error),
470
+ ...runtimeRecordErrorFields(error),
471
+ };
472
+ }
473
+ }
474
+ function runtimeRecordErrorFields(error) {
475
+ return error instanceof BackendConnectionAuthorityError
476
+ || error instanceof RuntimeRecordError
477
+ || error instanceof BackendLifecycleLockError
478
+ ? { errorCode: error.code }
479
+ : {};
480
+ }
481
+ function memoraxCodeHomeForService(serviceOptions) {
482
+ return backendServiceHome(serviceOptions);
483
+ }
484
+ async function withMemoraxCodeLifecycleLock(action, serviceOptions, operation) {
485
+ try {
486
+ return await withBackendLifecycleLock(serviceOptions, operation);
487
+ }
488
+ catch (error) {
489
+ if (!(error instanceof BackendLifecycleLockError))
490
+ throw error;
491
+ return {
492
+ ok: false,
493
+ action,
494
+ backend: {
495
+ ok: false,
496
+ action,
497
+ error: error.message,
498
+ errorCode: error.code,
499
+ },
500
+ };
501
+ }
502
+ }
503
+ export function isAdapterReady(report) {
504
+ const hookIntegration = report.integration === "hooks" || report.state?.integration === "hooks";
505
+ return hookIntegration
506
+ && report.ok !== false
507
+ && report.installed === true
508
+ && report.enabled === true
509
+ && report.backendUrlMatches !== false
510
+ && report.codexSkills?.ok !== false
511
+ && report.claudeSkills?.ok !== false;
512
+ }
513
+ export function isOptionalUnconfiguredClaudeAdapter(report, codexAdapter) {
514
+ return Boolean(report
515
+ && codexAdapter
516
+ && isAdapterReady(codexAdapter)
517
+ && report.ok !== false
518
+ && report.installed !== true
519
+ && !report.error);
520
+ }
521
+ function nonEmptyString(value) {
522
+ return typeof value === "string" && value.trim().length > 0;
523
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { runBackendCli } from "./server-cli.js";
3
+ runBackendCli(process.argv);