@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,283 @@
1
+ import { MEMORAX_DEFAULT_BASE_URL, MEMORAX_DEFAULT_MEMORY_OUTPUT_LANGUAGE, normalizeMemoraxBaseUrl, normalizeMemoraxMemoryOutputLanguage, } from "../../memorax-code-adapter-common/src/memorax-defaults.mjs";
2
+ import { defaultMemoraxCodeHome, loadMemoraxCodeConfig, } from "./memorax-code-config.js";
3
+ export { defaultMemoraxCodeHome, memoraxCodeConfigPath, loadMemoraxCodeConfig } from "./memorax-code-config.js";
4
+ export { seedMissingMemoraxCodeConfig } from "./memorax-code-config.js";
5
+ export { MEMORAX_DEFAULT_BASE_URL, MEMORAX_DEFAULT_MEMORY_OUTPUT_LANGUAGE };
6
+ export const MEMORAX_PROVIDER_ID = "memory.memorax";
7
+ export const MEMORAX_DEFAULT_MEMORY_TYPE_ORDER = ["core", "episodic", "semantic", "procedural", "unclassified"];
8
+ export const MEMORAX_DEFAULT_STARTUP_TIMEOUT_MS = 3000;
9
+ export const MEMORAX_MIN_STARTUP_TIMEOUT_MS = 100;
10
+ export const MEMORAX_MAX_STARTUP_TIMEOUT_MS = 10_000;
11
+ export const MEMORY_WRITEBACK_BUFFER_DEFAULT_MAX_TURNS = 8;
12
+ export const MEMORY_WRITEBACK_BUFFER_DEFAULT_MAX_AGE_MS = 10 * 60 * 1000;
13
+ export const MEMORY_WRITEBACK_BUFFER_DEFAULT_MAX_CHARS = 128_000;
14
+ export const MEMORY_WRITEBACK_DEFAULT_MAX_MESSAGE_CHARS = 64_000;
15
+ export const MEMORY_WRITEBACK_DEFAULT_CHUNK_MAX_CHARS = 8_000;
16
+ export const MEMORY_WRITEBACK_DEFAULT_CHUNK_OVERLAP_RATIO = 0.05;
17
+ export const MEMORY_CLI_DEFAULT_SESSION_ID = "memorax-cli";
18
+ export const MEMORY_CLI_DEFAULT_MAX_MEMORY_CHARS = 2000;
19
+ export function memoraxConfigFromEnv(env = process.env, fileConfig) {
20
+ const config = configForEnv(env, fileConfig);
21
+ const baseUrl = normalizeMemoraxBaseUrl(stringValue(env.MEMORAX_CODE_MEMORAX_ENDPOINT)
22
+ ?? config.memorax?.endpoint
23
+ ?? MEMORAX_DEFAULT_BASE_URL);
24
+ const apiKey = (stringValue(env.MEMORAX_CODE_MEMORAX_API_KEY) ?? config.memorax?.api_key ?? "").trim();
25
+ const userId = (stringValue(env.MEMORAX_CODE_MEMORAX_USER_ID) ?? config.memorax?.user_id ?? "").trim();
26
+ const outputLanguage = memoraxMemoryOutputLanguage(env, config);
27
+ if (!outputLanguage.ok)
28
+ return outputLanguage;
29
+ if (!apiKey)
30
+ return { ok: false, error: "MEMORAX_CODE_MEMORAX_API_KEY is required for memory.memorax" };
31
+ if (!userId)
32
+ return { ok: false, error: "MEMORAX_CODE_MEMORAX_USER_ID is required for memory.memorax" };
33
+ const searchConfig = memoraxSearchConfig(env, config);
34
+ const minScore = parseScore(env.MEMORAX_CODE_MEMORAX_MIN_SCORE ?? config.memory?.retrieval?.min_score);
35
+ return {
36
+ ok: true,
37
+ config: {
38
+ baseUrl,
39
+ apiKey,
40
+ userId,
41
+ memoryOutputLanguage: outputLanguage.value,
42
+ ...searchConfig,
43
+ ...(minScore === undefined ? {} : { minScore }),
44
+ },
45
+ };
46
+ }
47
+ function memoraxSearchConfig(env, config) {
48
+ const topK = clampInteger(env.MEMORAX_CODE_MEMORAX_TOP_K ?? config.memory?.retrieval?.top_k, 1, 100, config.memory?.retrieval?.top_k ?? 6);
49
+ return {
50
+ topK,
51
+ kDense: clampInteger(env.MEMORAX_CODE_MEMORAX_K_DENSE ?? config.memory?.retrieval?.k_dense, 0, 100, config.memory?.retrieval?.k_dense ?? topK),
52
+ kSparse: clampInteger(env.MEMORAX_CODE_MEMORAX_K_SPARSE ?? config.memory?.retrieval?.k_sparse, 0, 100, config.memory?.retrieval?.k_sparse ?? topK),
53
+ timeoutMs: clampInteger(env.MEMORAX_CODE_MEMORAX_TIMEOUT_MS ?? config.memorax?.timeout_ms, 1000, 120_000, config.memorax?.timeout_ms ?? 5000),
54
+ maxContextChars: clampInteger(env.MEMORAX_CODE_MEMORAX_MAX_CONTEXT_CHARS ?? config.memory?.retrieval?.max_context_chars, 256, 200_000, config.memory?.retrieval?.max_context_chars ?? 4000),
55
+ maxItemChars: clampInteger(env.MEMORAX_CODE_MEMORAX_MAX_ITEM_CHARS ?? config.memory?.retrieval?.max_item_chars, 64, 50_000, config.memory?.retrieval?.max_item_chars ?? 1000),
56
+ memoryTypeOrder: parseStringList(env.MEMORAX_CODE_MEMORAX_MEMORY_TYPE_ORDER ?? config.memory?.retrieval?.memory_type_order, config.memory?.retrieval?.memory_type_order ?? [...MEMORAX_DEFAULT_MEMORY_TYPE_ORDER]),
57
+ renderByMemoryType: parseBoolean(env.MEMORAX_CODE_MEMORAX_RENDER_BY_MEMORY_TYPE, config.memory?.retrieval?.render_by_memory_type ?? true),
58
+ };
59
+ }
60
+ export function startupRetrieveTimeoutMs(env, providerTimeoutMs, fileConfig) {
61
+ const config = configForEnv(env, fileConfig);
62
+ const startupCap = clampInteger(env.MEMORAX_CODE_MEMORAX_STARTUP_TIMEOUT_MS ?? config.memorax?.startup_timeout_ms, MEMORAX_MIN_STARTUP_TIMEOUT_MS, MEMORAX_MAX_STARTUP_TIMEOUT_MS, config.memorax?.startup_timeout_ms ?? MEMORAX_DEFAULT_STARTUP_TIMEOUT_MS);
63
+ return Math.min(providerTimeoutMs, startupCap);
64
+ }
65
+ export function memoraxWritebackEnabled(env = process.env) {
66
+ return env.MEMORAX_CODE_MEMORAX_WRITEBACK_ENABLED !== "false";
67
+ }
68
+ export function memoryRetrievalEnabled(env = process.env, fileConfig) {
69
+ const config = configForEnv(env, fileConfig);
70
+ return parseBoolean(env.MEMORAX_CODE_MEMORY_RETRIEVAL_ENABLED, config.memory?.retrieval?.enabled) === true;
71
+ }
72
+ export function memoryWritebackEnabled(env = process.env, fileConfig) {
73
+ const config = configForEnv(env, fileConfig);
74
+ return memoraxWritebackEnabled(env)
75
+ && memoryWritebackBufferConfig(env, config).maxTurns !== -1
76
+ && parseBoolean(env.MEMORAX_CODE_MEMORY_WRITEBACK_ENABLED, config.memory?.writeback?.enabled) === true;
77
+ }
78
+ export function memoryWritebackBufferEnabled(env = process.env, fileConfig) {
79
+ const config = configForEnv(env, fileConfig);
80
+ return parseBoolean(env.MEMORAX_CODE_MEMORY_WRITEBACK_BUFFER_ENABLED, config.memory?.writeback?.buffer_enabled ?? true) !== false;
81
+ }
82
+ export function memoryWritebackBufferConfig(env = process.env, fileConfig) {
83
+ const config = configForEnv(env, fileConfig);
84
+ return {
85
+ maxTurns: memoryWritebackAddInterval(env.MEMORAX_CODE_MEMORY_WRITEBACK_BUFFER_MAX_TURNS ?? config.memory?.writeback?.buffer_max_turns),
86
+ maxAgeMs: positiveInteger(env.MEMORAX_CODE_MEMORY_WRITEBACK_BUFFER_MAX_AGE_MS ?? config.memory?.writeback?.buffer_max_age_ms, config.memory?.writeback?.buffer_max_age_ms ?? MEMORY_WRITEBACK_BUFFER_DEFAULT_MAX_AGE_MS),
87
+ maxChars: positiveInteger(env.MEMORAX_CODE_MEMORY_WRITEBACK_BUFFER_MAX_CHARS ?? config.memory?.writeback?.buffer_max_chars, config.memory?.writeback?.buffer_max_chars ?? MEMORY_WRITEBACK_BUFFER_DEFAULT_MAX_CHARS),
88
+ };
89
+ }
90
+ function memoryWritebackAddInterval(value) {
91
+ if (String(value ?? "").trim() === "-1")
92
+ return -1;
93
+ return positiveInteger(value, MEMORY_WRITEBACK_BUFFER_DEFAULT_MAX_TURNS);
94
+ }
95
+ export function memoryWritebackMaxMessageChars(env = process.env, fileConfig) {
96
+ const config = configForEnv(env, fileConfig);
97
+ return positiveInteger(env.MEMORAX_CODE_MEMORY_WRITEBACK_MAX_MESSAGE_CHARS ?? config.memory?.writeback?.max_message_chars, config.memory?.writeback?.max_message_chars ?? MEMORY_WRITEBACK_DEFAULT_MAX_MESSAGE_CHARS);
98
+ }
99
+ export function memoryWritebackChunkEnabled(env = process.env, fileConfig) {
100
+ const config = configForEnv(env, fileConfig);
101
+ return parseBoolean(env.MEMORAX_CODE_MEMORY_WRITEBACK_CHUNK_ENABLED, config.memory?.writeback?.chunk_enabled ?? true) !== false;
102
+ }
103
+ export function memoryWritebackChunkConfig(env = process.env, fileConfig) {
104
+ const config = configForEnv(env, fileConfig);
105
+ return {
106
+ maxChars: positiveInteger(env.MEMORAX_CODE_MEMORY_WRITEBACK_CHUNK_MAX_CHARS ?? config.memory?.writeback?.chunk_max_chars, config.memory?.writeback?.chunk_max_chars ?? MEMORY_WRITEBACK_DEFAULT_CHUNK_MAX_CHARS),
107
+ overlapRatio: boundedRatio(env.MEMORAX_CODE_MEMORY_WRITEBACK_CHUNK_OVERLAP_RATIO ?? config.memory?.writeback?.chunk_overlap_ratio, config.memory?.writeback?.chunk_overlap_ratio ?? MEMORY_WRITEBACK_DEFAULT_CHUNK_OVERLAP_RATIO),
108
+ };
109
+ }
110
+ export function memoryCliAddEnabled(env = process.env, fileConfig) {
111
+ const config = configForEnv(env, fileConfig);
112
+ return parseBoolean(env.MEMORAX_CODE_MEMORY_CLI_ADD_ENABLED, config.memory?.cli?.add_enabled ?? true) === true
113
+ && memoraxWritebackEnabled(env);
114
+ }
115
+ export function memoryCliSessionId(args = [], env = process.env) {
116
+ return argValue(args, "--session-id")?.trim()
117
+ || env.MEMORAX_CODE_MEMORY_CLI_SESSION_ID?.trim()
118
+ || env.MEMORAX_CODE_MEMORAX_SESSION_ID?.trim()
119
+ || MEMORY_CLI_DEFAULT_SESSION_ID;
120
+ }
121
+ export function memoryCliMaxMemoryChars(env = process.env, fileConfig) {
122
+ const config = configForEnv(env, fileConfig);
123
+ return positiveInteger(env.MEMORAX_CODE_MEMORY_CLI_MAX_MEMORY_CHARS ?? config.memory?.cli?.max_memory_chars, config.memory?.cli?.max_memory_chars ?? MEMORY_CLI_DEFAULT_MAX_MEMORY_CHARS);
124
+ }
125
+ export function memoraxAddOptionsFromContext(context, env = process.env, fileConfig) {
126
+ const config = configForEnv(env, fileConfig);
127
+ const contentTypeValue = stringValue(context.contentType)
128
+ ?? stringValue(context.content_type)
129
+ ?? stringValue(env.MEMORAX_CODE_MEMORAX_ADD_CONTENT_TYPE)
130
+ ?? config.memory?.add?.content_type;
131
+ const modeValue = stringValue(context.mode)
132
+ ?? stringValue(env.MEMORAX_CODE_MEMORAX_ADD_MODE)
133
+ ?? config.memory?.add?.mode;
134
+ const contentTypeResult = parseAddContentType(contentTypeValue, "content_type");
135
+ if (!contentTypeResult.ok)
136
+ return contentTypeResult;
137
+ const modeResult = parseAddMode(modeValue, "mode");
138
+ if (!modeResult.ok)
139
+ return modeResult;
140
+ const contentType = contentTypeResult.value;
141
+ const mode = modeResult.value ?? (contentType ? "default" : undefined);
142
+ return {
143
+ ok: true,
144
+ options: {
145
+ ...(contentType ? { contentType } : {}),
146
+ ...(mode ? { mode } : {}),
147
+ },
148
+ };
149
+ }
150
+ export function memoryConfigStatus(env = process.env, fileConfig) {
151
+ const config = configForEnv(env, fileConfig);
152
+ const configResult = memoraxConfigFromEnv(env, config);
153
+ const baseConfig = configResult.ok ? configResult.config : undefined;
154
+ const addStatus = memoraxAddStatus(env, config);
155
+ const fallbackSearchConfig = {
156
+ ...memoraxSearchConfig(env, config),
157
+ minScore: parseScore(env.MEMORAX_CODE_MEMORAX_MIN_SCORE ?? config.memory?.retrieval?.min_score),
158
+ };
159
+ const searchConfig = baseConfig ?? fallbackSearchConfig;
160
+ return {
161
+ provider: MEMORAX_PROVIDER_ID,
162
+ ...(baseConfig ? { baseUrl: baseConfig.baseUrl, userId: baseConfig.userId } : {}),
163
+ configured: configResult.ok,
164
+ search: {
165
+ enabled: configResult.ok,
166
+ retrievalEnabled: memoryRetrievalEnabled(env, config),
167
+ topK: searchConfig.topK,
168
+ kDense: searchConfig.kDense,
169
+ kSparse: searchConfig.kSparse,
170
+ timeoutMs: searchConfig.timeoutMs,
171
+ startupTimeoutMs: startupRetrieveTimeoutMs(env, searchConfig.timeoutMs, config),
172
+ ...(searchConfig.minScore === undefined ? {} : { minScore: searchConfig.minScore }),
173
+ maxContextChars: searchConfig.maxContextChars,
174
+ maxItemChars: searchConfig.maxItemChars,
175
+ memoryTypeOrder: searchConfig.memoryTypeOrder,
176
+ renderByMemoryType: searchConfig.renderByMemoryType,
177
+ },
178
+ writeback: {
179
+ globalEnabled: memoraxWritebackEnabled(env),
180
+ writebackEnabled: memoryWritebackEnabled(env, config),
181
+ writebackBufferEnabled: memoryWritebackBufferEnabled(env, config),
182
+ writebackBuffer: memoryWritebackBufferConfig(env, config),
183
+ writebackMaxMessageChars: memoryWritebackMaxMessageChars(env, config),
184
+ writebackChunkEnabled: memoryWritebackChunkEnabled(env, config),
185
+ writebackChunk: memoryWritebackChunkConfig(env, config),
186
+ },
187
+ add: addStatus,
188
+ cli: {
189
+ addEnabled: memoryCliAddEnabled(env, config),
190
+ sessionId: memoryCliSessionId([], env),
191
+ maxMemoryChars: memoryCliMaxMemoryChars(env, config),
192
+ },
193
+ ...(configResult.ok ? {} : { error: configResult.error }),
194
+ };
195
+ }
196
+ function configForEnv(env, fileConfig) {
197
+ return fileConfig ?? loadMemoraxCodeConfig(defaultMemoraxCodeHome(env));
198
+ }
199
+ function memoraxAddStatus(env, fileConfig) {
200
+ const config = configForEnv(env, fileConfig);
201
+ const contentTypeResult = parseAddContentType(stringValue(env.MEMORAX_CODE_MEMORAX_ADD_CONTENT_TYPE) ?? config.memory?.add?.content_type, "content_type");
202
+ const modeResult = parseAddMode(stringValue(env.MEMORAX_CODE_MEMORAX_ADD_MODE) ?? config.memory?.add?.mode, "mode");
203
+ const outputLanguage = memoraxMemoryOutputLanguage(env, config);
204
+ return {
205
+ ...(contentTypeResult.ok && contentTypeResult.value ? { contentType: contentTypeResult.value } : {}),
206
+ ...(modeResult.ok && modeResult.value ? { mode: modeResult.value } : {}),
207
+ ...(outputLanguage.ok ? { outputLanguage: outputLanguage.value } : {}),
208
+ };
209
+ }
210
+ function memoraxMemoryOutputLanguage(env, config) {
211
+ const raw = stringValue(env.MEMORAX_CODE_MEMORY_OUTPUT_LANGUAGE)
212
+ ?? stringValue(config.memory?.add?.output_language)
213
+ ?? MEMORAX_DEFAULT_MEMORY_OUTPUT_LANGUAGE;
214
+ const value = normalizeMemoraxMemoryOutputLanguage(raw);
215
+ return value
216
+ ? { ok: true, value }
217
+ : { ok: false, error: "memory output language must be zh or en" };
218
+ }
219
+ function parseAddContentType(value, label) {
220
+ if (!value)
221
+ return { ok: true };
222
+ if (value === "dialogue" || value === "code")
223
+ return { ok: true, value };
224
+ return { ok: false, error: `${label} must be dialogue or code` };
225
+ }
226
+ function parseAddMode(value, label) {
227
+ if (!value)
228
+ return { ok: true };
229
+ if (value === "default" || value === "raw" || value === "pre_summarized")
230
+ return { ok: true, value };
231
+ return { ok: false, error: `${label} must be default, raw, or pre_summarized` };
232
+ }
233
+ export function parseBoolean(value, fallback) {
234
+ if (value === undefined || value === null || value === "")
235
+ return fallback;
236
+ if (typeof value === "boolean")
237
+ return value;
238
+ const normalized = String(value).trim().toLowerCase();
239
+ if (["1", "true", "yes", "y", "on"].includes(normalized))
240
+ return true;
241
+ if (["0", "false", "no", "n", "off"].includes(normalized))
242
+ return false;
243
+ return fallback;
244
+ }
245
+ export function positiveInteger(value, fallback) {
246
+ if (value === undefined || value === null || value === "")
247
+ return fallback;
248
+ const parsed = typeof value === "number" ? value : Number.parseInt(String(value).trim(), 10);
249
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
250
+ }
251
+ export function boundedRatio(value, fallback) {
252
+ if (value === undefined || value === null || value === "")
253
+ return fallback;
254
+ const parsed = typeof value === "number" ? value : Number.parseFloat(String(value).trim());
255
+ return Number.isFinite(parsed) && parsed >= 0 && parsed < 1 ? parsed : fallback;
256
+ }
257
+ export function clampInteger(value, min, max, fallback = min) {
258
+ const number = typeof value === "number" ? value : Number(value);
259
+ if (!Number.isFinite(number))
260
+ return fallback;
261
+ return Math.max(min, Math.min(max, Math.trunc(number)));
262
+ }
263
+ export function parseScore(value) {
264
+ if (value === undefined || value === null || value === "")
265
+ return undefined;
266
+ const number = typeof value === "number" ? value : Number(value);
267
+ return Number.isFinite(number) && number >= 0 && number <= 1 ? number : undefined;
268
+ }
269
+ export function stringValue(value) {
270
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
271
+ }
272
+ export function parseStringList(value, fallback) {
273
+ if (Array.isArray(value))
274
+ return value.map((item) => String(item).trim()).filter(Boolean);
275
+ if (typeof value !== "string" || !value.trim())
276
+ return [...fallback];
277
+ const items = value.split(",").map((item) => item.trim()).filter(Boolean);
278
+ return items.length > 0 ? items : [...fallback];
279
+ }
280
+ function argValue(args, name) {
281
+ const index = args.indexOf(name);
282
+ return index >= 0 ? args[index + 1] : undefined;
283
+ }
@@ -0,0 +1,142 @@
1
+ import { isRecord } from "./utils.js";
2
+ export async function postMemoraxJson(config, path, payload, fetchImpl) {
3
+ const controller = new AbortController();
4
+ const timeout = setTimeout(() => controller.abort(), config.timeoutMs);
5
+ try {
6
+ const response = await fetchImpl(`${config.baseUrl}${path}`, {
7
+ method: "POST",
8
+ headers: {
9
+ "Content-Type": "application/json",
10
+ Authorization: `Token ${config.apiKey}`,
11
+ },
12
+ body: JSON.stringify(payload),
13
+ signal: controller.signal,
14
+ });
15
+ if (!response.ok) {
16
+ const retryAfterMs = parseRetryAfterMs(response.headers.get("retry-after"));
17
+ await response.arrayBuffer().catch(() => undefined);
18
+ throw createMemoraxRequestError(`MemoraX HTTP ${response.status}`, "http", {
19
+ status: response.status,
20
+ retryAfterMs,
21
+ });
22
+ }
23
+ const raw = await response.json().catch(() => null);
24
+ validateMemoraxEnvelope(raw);
25
+ return raw;
26
+ }
27
+ catch (error) {
28
+ throw normalizeMemoraxRequestError(error, controller.signal.aborted);
29
+ }
30
+ finally {
31
+ clearTimeout(timeout);
32
+ }
33
+ }
34
+ export async function getMemoraxJson(config, path, fetchImpl) {
35
+ const controller = new AbortController();
36
+ const timeout = setTimeout(() => controller.abort(), config.timeoutMs);
37
+ try {
38
+ const response = await fetchImpl(`${config.baseUrl}${path}`, {
39
+ method: "GET",
40
+ headers: {
41
+ Authorization: `Token ${config.apiKey}`,
42
+ },
43
+ signal: controller.signal,
44
+ });
45
+ if (!response.ok) {
46
+ const retryAfterMs = parseRetryAfterMs(response.headers.get("retry-after"));
47
+ await response.arrayBuffer().catch(() => undefined);
48
+ throw createMemoraxRequestError(`MemoraX HTTP ${response.status}`, "http", {
49
+ status: response.status,
50
+ retryAfterMs,
51
+ });
52
+ }
53
+ return await response.json().catch(() => null);
54
+ }
55
+ catch (error) {
56
+ throw normalizeMemoraxRequestError(error, controller.signal.aborted);
57
+ }
58
+ finally {
59
+ clearTimeout(timeout);
60
+ }
61
+ }
62
+ export function memoraxInvocationFailure(error) {
63
+ const requestError = error instanceof Error ? error : undefined;
64
+ return {
65
+ ok: false,
66
+ error: formatMemoraxError(error),
67
+ ...(requestError?.memoraxErrorKind ? { errorKind: requestError.memoraxErrorKind } : {}),
68
+ ...(Number.isInteger(requestError?.status) ? { httpStatus: requestError?.status } : {}),
69
+ ...(Number.isFinite(requestError?.retryAfterMs) ? { retryAfterMs: requestError?.retryAfterMs } : {}),
70
+ };
71
+ }
72
+ function createMemoraxRequestError(message, kind, fields = {}) {
73
+ const error = new Error(message);
74
+ error.memoraxErrorKind = kind;
75
+ if (fields.status !== undefined)
76
+ error.status = fields.status;
77
+ if (fields.retryAfterMs !== undefined)
78
+ error.retryAfterMs = fields.retryAfterMs;
79
+ return error;
80
+ }
81
+ function normalizeMemoraxRequestError(error, timedOut) {
82
+ if (isMemoraxRequestError(error))
83
+ return error;
84
+ const kind = timedOut || (error instanceof Error && error.name === "AbortError")
85
+ ? "timeout"
86
+ : "transport";
87
+ return createMemoraxRequestError(formatMemoraxError(error), kind);
88
+ }
89
+ function isMemoraxRequestError(error) {
90
+ if (!(error instanceof Error))
91
+ return false;
92
+ const kind = error.memoraxErrorKind;
93
+ return kind === "http"
94
+ || kind === "timeout"
95
+ || kind === "transport"
96
+ || kind === "response";
97
+ }
98
+ function formatMemoraxError(error) {
99
+ if (error instanceof Error)
100
+ return error.message;
101
+ return String(error);
102
+ }
103
+ function parseRetryAfterMs(value, now = Date.now()) {
104
+ const text = value?.trim();
105
+ if (!text)
106
+ return undefined;
107
+ if (/^\d+$/.test(text))
108
+ return Number.parseInt(text, 10) * 1000;
109
+ const at = Date.parse(text);
110
+ if (!Number.isFinite(at))
111
+ return undefined;
112
+ return Math.max(0, at - now);
113
+ }
114
+ function validateMemoraxEnvelope(raw) {
115
+ if (!isRecord(raw))
116
+ return;
117
+ if (raw.success === false) {
118
+ throw createMemoraxRequestError(memoraxEnvelopeErrorMessage(raw), "response");
119
+ }
120
+ const data = isRecord(raw.data) ? raw.data : undefined;
121
+ const status = typeof data?.status === "string" ? data.status.trim().toLowerCase() : "";
122
+ if (["failed", "error", "cancelled", "canceled"].includes(status)) {
123
+ throw createMemoraxRequestError(memoraxEnvelopeErrorMessage(raw, `MemoraX task ${status}`), "response");
124
+ }
125
+ }
126
+ function memoraxEnvelopeErrorMessage(raw, fallback = "MemoraX request failed") {
127
+ const error = raw.error;
128
+ if (typeof error === "string" && error.trim())
129
+ return error.trim();
130
+ if (isRecord(error)) {
131
+ for (const key of ["message", "detail", "error"]) {
132
+ const value = error[key];
133
+ if (typeof value === "string" && value.trim())
134
+ return value.trim();
135
+ }
136
+ }
137
+ const data = isRecord(raw.data) ? raw.data : undefined;
138
+ const message = data?.message ?? data?.error;
139
+ if (typeof message === "string" && message.trim())
140
+ return message.trim();
141
+ return fallback;
142
+ }