@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.
- package/LICENSE +21 -0
- package/README.md +53 -0
- package/bin/memorax-cli.mjs +28 -0
- package/bin/memorax-code-backend.mjs +4 -0
- package/bin/memorax-code-claude.mjs +4 -0
- package/bin/memorax-code-codex.mjs +4 -0
- package/bin/memorax-code-npm-preinstall.mjs +55 -0
- package/bin/memorax-code-plugin-postinstall.mjs +1236 -0
- package/bin/memorax-code.mjs +204 -0
- package/docs/configuration.md +232 -0
- package/docs/troubleshooting.md +179 -0
- package/lib/client-hook-runtime.mjs +32 -0
- package/lib/memorax-code-adapter-common/src/backend-connection.d.mts +111 -0
- package/lib/memorax-code-adapter-common/src/backend-connection.mjs +304 -0
- package/lib/memorax-code-adapter-common/src/clients/claude-command.mjs +38 -0
- package/lib/memorax-code-adapter-common/src/clients/codex-command.mjs +41 -0
- package/lib/memorax-code-adapter-common/src/clients/codex-plugin-artifact.d.mts +3 -0
- package/lib/memorax-code-adapter-common/src/clients/codex-plugin-artifact.mjs +38 -0
- package/lib/memorax-code-adapter-common/src/config-utils.d.mts +27 -0
- package/lib/memorax-code-adapter-common/src/config-utils.mjs +391 -0
- package/lib/memorax-code-adapter-common/src/hooks/capture-cwd-hook.mjs +137 -0
- package/lib/memorax-code-adapter-common/src/hooks/client-hook-launcher.mjs +324 -0
- package/lib/memorax-code-adapter-common/src/hooks/ensure-backend-runner.mjs +142 -0
- package/lib/memorax-code-adapter-common/src/hooks/hook-runtime-generation.d.mts +38 -0
- package/lib/memorax-code-adapter-common/src/hooks/hook-runtime-generation.mjs +501 -0
- package/lib/memorax-code-adapter-common/src/hooks/memory-skill-reminder-hook.mjs +277 -0
- package/lib/memorax-code-adapter-common/src/memorax-code-config-file.d.mts +28 -0
- package/lib/memorax-code-adapter-common/src/memorax-code-config-file.mjs +296 -0
- package/lib/memorax-code-adapter-common/src/memorax-defaults.d.mts +10 -0
- package/lib/memorax-code-adapter-common/src/memorax-defaults.mjs +12 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-context.mjs +28 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-marker.mjs +252 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-supervisor.mjs +559 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-worker.mjs +411 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-update-policy-evaluator.mjs +185 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-update-policy.mjs +165 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-procedure-memory-context.mjs +181 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-user-profile-context.mjs +251 -0
- package/lib/memorax-code-adapter-common/src/runtime-record.d.mts +55 -0
- package/lib/memorax-code-adapter-common/src/runtime-record.mjs +152 -0
- package/lib/memorax-code-adapter-common/src/windows-cli-invocation.mjs +100 -0
- package/lib/memorax-code-backend/dist/active-client-selection.js +35 -0
- package/lib/memorax-code-backend/dist/adapter-lifecycle-participant.js +1 -0
- package/lib/memorax-code-backend/dist/automatic-memory-retrieval.js +113 -0
- package/lib/memorax-code-backend/dist/automatic-memory-writeback.js +297 -0
- package/lib/memorax-code-backend/dist/backend-env.js +13 -0
- package/lib/memorax-code-backend/dist/backend-lifecycle-lock.js +42 -0
- package/lib/memorax-code-backend/dist/backend-process.js +147 -0
- package/lib/memorax-code-backend/dist/backend-service-cleanup.js +18 -0
- package/lib/memorax-code-backend/dist/backend-service-record.js +206 -0
- package/lib/memorax-code-backend/dist/backend-service-result.js +37 -0
- package/lib/memorax-code-backend/dist/backend-service-token.js +11 -0
- package/lib/memorax-code-backend/dist/backend-shutdown-request.js +133 -0
- package/lib/memorax-code-backend/dist/backend-state.js +58 -0
- package/lib/memorax-code-backend/dist/backend-status.js +53 -0
- package/lib/memorax-code-backend/dist/backend-token-record.js +79 -0
- package/lib/memorax-code-backend/dist/claude-adapter-lifecycle.js +134 -0
- package/lib/memorax-code-backend/dist/claude-local-transcript.js +648 -0
- package/lib/memorax-code-backend/dist/claude-memory-hook-runtime.js +472 -0
- package/lib/memorax-code-backend/dist/claude-transcript-turn.js +876 -0
- package/lib/memorax-code-backend/dist/client-plugin-removal.js +67 -0
- package/lib/memorax-code-backend/dist/client-selection.js +36 -0
- package/lib/memorax-code-backend/dist/codex-adapter-lifecycle.js +131 -0
- package/lib/memorax-code-backend/dist/codex-effective-prompt.js +54 -0
- package/lib/memorax-code-backend/dist/codex-memory-hook-runtime.js +541 -0
- package/lib/memorax-code-backend/dist/codex-plugin-hooks.js +421 -0
- package/lib/memorax-code-backend/dist/codex-plugin-install.js +523 -0
- package/lib/memorax-code-backend/dist/codex-rollout-turn.js +402 -0
- package/lib/memorax-code-backend/dist/codex-session-turn-index.js +88 -0
- package/lib/memorax-code-backend/dist/codex-workspace-links.js +55 -0
- package/lib/memorax-code-backend/dist/debug-log.js +21 -0
- package/lib/memorax-code-backend/dist/entrypoint.js +14 -0
- package/lib/memorax-code-backend/dist/incremental-jsonl-projection.js +271 -0
- package/lib/memorax-code-backend/dist/install-watchdog.js +71 -0
- package/lib/memorax-code-backend/dist/jsonl-append.js +75 -0
- package/lib/memorax-code-backend/dist/memorax-adapter.js +451 -0
- package/lib/memorax-code-backend/dist/memorax-cli.js +14 -0
- package/lib/memorax-code-backend/dist/memorax-code-config.js +279 -0
- package/lib/memorax-code-backend/dist/memorax-code-lifecycle.js +523 -0
- package/lib/memorax-code-backend/dist/memorax-code.js +3 -0
- package/lib/memorax-code-backend/dist/memorax-config.js +283 -0
- package/lib/memorax-code-backend/dist/memorax-http.js +142 -0
- package/lib/memorax-code-backend/dist/memory-cli.js +345 -0
- package/lib/memorax-code-backend/dist/memory-hook-command.js +200 -0
- package/lib/memorax-code-backend/dist/memory-observability.js +1 -0
- package/lib/memorax-code-backend/dist/memory-project.js +89 -0
- package/lib/memorax-code-backend/dist/memory-reminder-trace-recorder.js +58 -0
- package/lib/memorax-code-backend/dist/memory-service.js +66 -0
- package/lib/memorax-code-backend/dist/memory-turn-coordinator.js +139 -0
- package/lib/memorax-code-backend/dist/memory-viewer-activity.js +113 -0
- package/lib/memorax-code-backend/dist/memory-viewer-data-projection-cache.js +69 -0
- package/lib/memorax-code-backend/dist/memory-viewer-event-identity.js +3 -0
- package/lib/memorax-code-backend/dist/memory-viewer-history-projection.js +79 -0
- package/lib/memorax-code-backend/dist/memory-viewer-logo.js +1 -0
- package/lib/memorax-code-backend/dist/memory-viewer-observability.js +8 -0
- package/lib/memorax-code-backend/dist/memory-viewer-redaction.js +52 -0
- package/lib/memorax-code-backend/dist/memory-viewer-session-title.js +93 -0
- package/lib/memorax-code-backend/dist/memory-viewer-store.js +964 -0
- package/lib/memorax-code-backend/dist/memory-viewer-turn-reference.js +12 -0
- package/lib/memorax-code-backend/dist/memory-viewer-user-html.js +115 -0
- package/lib/memorax-code-backend/dist/memory-viewer-user-projection.js +168 -0
- package/lib/memorax-code-backend/dist/memory-viewer-writeback-status.js +97 -0
- package/lib/memorax-code-backend/dist/memory-writeback-buffer.js +217 -0
- package/lib/memorax-code-backend/dist/memory-writeback-chunk.js +120 -0
- package/lib/memorax-code-backend/dist/memory-writeback-reconciler.js +244 -0
- package/lib/memorax-code-backend/dist/memory-writeback-task-projection.js +377 -0
- package/lib/memorax-code-backend/dist/proxy-env.js +54 -0
- package/lib/memorax-code-backend/dist/repo-memory-readiness.js +188 -0
- package/lib/memorax-code-backend/dist/repository-memory-context.js +134 -0
- package/lib/memorax-code-backend/dist/repository-memory-scope.js +490 -0
- package/lib/memorax-code-backend/dist/server-cli.js +787 -0
- package/lib/memorax-code-backend/dist/server-health.js +16 -0
- package/lib/memorax-code-backend/dist/server-http.js +110 -0
- package/lib/memorax-code-backend/dist/server-json.js +4 -0
- package/lib/memorax-code-backend/dist/server-memory-hook.js +32 -0
- package/lib/memorax-code-backend/dist/server-memory-viewer.js +135 -0
- package/lib/memorax-code-backend/dist/server-observability.js +102 -0
- package/lib/memorax-code-backend/dist/server.js +220 -0
- package/lib/memorax-code-backend/dist/service-entrypoint.js +10 -0
- package/lib/memorax-code-backend/dist/service.js +567 -0
- package/lib/memorax-code-backend/dist/trace-config.js +112 -0
- package/lib/memorax-code-backend/dist/trace-context.js +111 -0
- package/lib/memorax-code-backend/dist/trace-store.js +571 -0
- package/lib/memorax-code-backend/dist/utils.js +3 -0
- package/lib/memorax-code-backend/dist/windows-cli-invocation.js +148 -0
- package/lib/memorax-code-backend/package.json +26 -0
- package/lib/memorax-code-claude-adapter/.claude-plugin/plugin.json +15 -0
- package/lib/memorax-code-claude-adapter/hooks/hook-launcher.mjs +27 -0
- package/lib/memorax-code-claude-adapter/hooks/hooks.json +66 -0
- package/lib/memorax-code-claude-adapter/hooks/repo-memory-job.mjs +37 -0
- package/lib/memorax-code-claude-adapter/hooks/runtime-hook.mjs +4 -0
- package/lib/memorax-code-claude-adapter/hooks/runtime-shell.json +5 -0
- package/lib/memorax-code-claude-adapter/package.json +13 -0
- package/lib/memorax-code-claude-adapter/runtime-hooks/capture-cwd.mjs +17 -0
- package/lib/memorax-code-claude-adapter/runtime-hooks/ensure-backend.mjs +59 -0
- package/lib/memorax-code-claude-adapter/runtime-hooks/memory-cli-session.mjs +33 -0
- package/lib/memorax-code-claude-adapter/runtime-hooks/memory-skill-reminder.mjs +73 -0
- package/lib/memorax-code-claude-adapter/runtime-hooks/memory-turn.mjs +91 -0
- package/lib/memorax-code-claude-adapter/scripts/build-marketplace.mjs +99 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +83 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/agents/claude.yaml +10 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/agents/openai.yaml +7 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/defaults.json +9 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +82 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +61 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/personal-read.md +46 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/personal-write.md +100 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-build.md +270 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-read.md +96 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-templates.md +270 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-update.md +116 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/collect_all.py +496 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/detect_updates.py +856 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/github_resource_facets.py +504 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +509 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/validate_memory.py +226 -0
- package/lib/memorax-code-claude-adapter/src/adapter-paths.mjs +46 -0
- package/lib/memorax-code-claude-adapter/src/cli.mjs +363 -0
- package/lib/memorax-code-claude-adapter/src/config-utils.mjs +1 -0
- package/lib/memorax-code-claude-adapter/src/config.mjs +544 -0
- package/lib/memorax-code-claude-adapter/src/plugin-artifact-contract.mjs +148 -0
- package/lib/memorax-code-claude-adapter/src/plugin-install.mjs +566 -0
- package/lib/memorax-code-claude-marketplace/.claude-plugin/marketplace.json +15 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/.claude-plugin/plugin.json +15 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/hook-launcher.mjs +27 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/hooks.json +66 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/repo-memory-job.mjs +37 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-hook.mjs +4 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-shell.json +5 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/backend-connection.d.mts +111 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/backend-connection.mjs +304 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/claude-command.mjs +38 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/codex-command.mjs +41 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/codex-plugin-artifact.d.mts +3 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/clients/codex-plugin-artifact.mjs +38 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/config-utils.d.mts +27 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/config-utils.mjs +391 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/capture-cwd-hook.mjs +137 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/client-hook-launcher.mjs +324 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/ensure-backend-runner.mjs +142 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/hook-runtime-generation.d.mts +38 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/hook-runtime-generation.mjs +501 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/memory-skill-reminder-hook.mjs +277 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-code-config-file.d.mts +28 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-code-config-file.mjs +296 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-defaults.d.mts +10 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/memorax-defaults.mjs +12 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/runtime-record.d.mts +55 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/runtime-record.mjs +152 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/windows-cli-invocation.mjs +100 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/package.json +13 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/capture-cwd.mjs +17 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/ensure-backend.mjs +59 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-cli-session.mjs +33 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-skill-reminder.mjs +73 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-turn.mjs +91 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/scripts/build-marketplace.mjs +99 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +83 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/agents/claude.yaml +10 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/agents/openai.yaml +7 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/defaults.json +9 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +82 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +61 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/personal-read.md +46 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/personal-write.md +100 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-build.md +270 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-read.md +96 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-templates.md +270 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-update.md +116 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/collect_all.py +496 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/detect_updates.py +856 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/github_resource_facets.py +504 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +509 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/validate_memory.py +226 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/adapter-paths.mjs +46 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/cli.mjs +363 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/config-utils.mjs +1 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/config.mjs +544 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/plugin-artifact-contract.mjs +148 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/plugin-install.mjs +566 -0
- package/lib/memorax-code-codex-adapter/.codex-plugin/plugin.json +33 -0
- package/lib/memorax-code-codex-adapter/assets/composer-icon.png +0 -0
- package/lib/memorax-code-codex-adapter/assets/logo.png +0 -0
- package/lib/memorax-code-codex-adapter/hooks/hook-launcher.mjs +26 -0
- package/lib/memorax-code-codex-adapter/hooks/hooks.json +61 -0
- package/lib/memorax-code-codex-adapter/hooks/repo-memory-job.mjs +38 -0
- package/lib/memorax-code-codex-adapter/hooks/repo-memory-update-policy.mjs +10 -0
- package/lib/memorax-code-codex-adapter/hooks/runtime-hook.mjs +4 -0
- package/lib/memorax-code-codex-adapter/hooks/runtime-shell.json +5 -0
- package/lib/memorax-code-codex-adapter/package.json +13 -0
- package/lib/memorax-code-codex-adapter/runtime-hooks/capture-cwd.mjs +18 -0
- package/lib/memorax-code-codex-adapter/runtime-hooks/ensure-backend.mjs +82 -0
- package/lib/memorax-code-codex-adapter/runtime-hooks/memory-skill-reminder.mjs +125 -0
- package/lib/memorax-code-codex-adapter/runtime-hooks/memory-writeback.mjs +52 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/SKILL.md +83 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/agents/claude.yaml +10 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/agents/openai.yaml +7 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/defaults.json +9 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-add.md +82 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-search.md +61 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/personal-read.md +46 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/personal-write.md +100 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-build.md +270 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-read.md +96 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-templates.md +270 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-update.md +116 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/collect_all.py +496 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/detect_updates.py +856 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/github_resource_facets.py +504 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +509 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/validate_memory.py +226 -0
- package/lib/memorax-code-codex-adapter/src/adapter-paths.mjs +29 -0
- package/lib/memorax-code-codex-adapter/src/cli.mjs +368 -0
- package/lib/memorax-code-codex-adapter/src/config-utils.mjs +1 -0
- package/lib/memorax-code-codex-adapter/src/config.mjs +226 -0
- package/lib/memorax-code-codex-adapter/src/session-registry.mjs +331 -0
- package/lib/memorax-code-codex-adapter/src/workspace-kind.mjs +68 -0
- package/lib/node-version.mjs +11 -0
- package/lib/npm-invocation.mjs +31 -0
- package/lib/resolve-claude-command.mjs +47 -0
- package/lib/resolve-codex-command.mjs +94 -0
- package/lib/run-entrypoint.mjs +83 -0
- package/lib/vscode-extension-command.mjs +119 -0
- package/lib/windows-cli-invocation.mjs +100 -0
- package/package.json +45 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RuntimeRecordError,
|
|
3
|
+
type RuntimeRecordWriteResult,
|
|
4
|
+
type RuntimeRecordWriteRuntime,
|
|
5
|
+
} from "./runtime-record.mjs";
|
|
6
|
+
|
|
7
|
+
export type BackendConnectionAuthority = Readonly<{
|
|
8
|
+
version: 1;
|
|
9
|
+
url: string;
|
|
10
|
+
tokenPath?: string;
|
|
11
|
+
}>;
|
|
12
|
+
|
|
13
|
+
export type BackendConnectionAuthorityInvalidReason =
|
|
14
|
+
| "unreadable"
|
|
15
|
+
| "malformed_json"
|
|
16
|
+
| "invalid_record"
|
|
17
|
+
| "invalid_version"
|
|
18
|
+
| "unknown_fields"
|
|
19
|
+
| "invalid_url"
|
|
20
|
+
| "invalid_token_path";
|
|
21
|
+
|
|
22
|
+
export type BackendConnectionAuthorityState =
|
|
23
|
+
| Readonly<{ status: "absent" }>
|
|
24
|
+
| Readonly<{ status: "valid"; authority: BackendConnectionAuthority }>
|
|
25
|
+
| Readonly<{ status: "invalid"; reason: BackendConnectionAuthorityInvalidReason }>
|
|
26
|
+
| Readonly<{ status: "unsupported"; version: number }>;
|
|
27
|
+
|
|
28
|
+
export type BackendConnection = Readonly<{
|
|
29
|
+
memoraxCodeHome: string;
|
|
30
|
+
authorityPath: string;
|
|
31
|
+
authority?: BackendConnectionAuthority;
|
|
32
|
+
url: string;
|
|
33
|
+
source: "option" | "environment" | "authority" | "default";
|
|
34
|
+
host: string;
|
|
35
|
+
port: number;
|
|
36
|
+
token?: string;
|
|
37
|
+
tokenSource: "environment" | "authority-file" | "none";
|
|
38
|
+
}>;
|
|
39
|
+
|
|
40
|
+
export type BackendTokenRecord = Readonly<{
|
|
41
|
+
version: 1;
|
|
42
|
+
token: string;
|
|
43
|
+
createdAt: string;
|
|
44
|
+
rotatedAt?: string;
|
|
45
|
+
}>;
|
|
46
|
+
|
|
47
|
+
export type BackendTokenRecordInvalidReason =
|
|
48
|
+
| "unreadable"
|
|
49
|
+
| "malformed_json"
|
|
50
|
+
| "invalid_record"
|
|
51
|
+
| "invalid_version"
|
|
52
|
+
| "unknown_fields"
|
|
53
|
+
| "invalid_token"
|
|
54
|
+
| "invalid_created_at"
|
|
55
|
+
| "invalid_rotated_at";
|
|
56
|
+
|
|
57
|
+
export type BackendTokenRecordState =
|
|
58
|
+
| Readonly<{ status: "absent" }>
|
|
59
|
+
| Readonly<{ status: "valid"; record: BackendTokenRecord }>
|
|
60
|
+
| Readonly<{ status: "invalid"; reason: BackendTokenRecordInvalidReason }>
|
|
61
|
+
| Readonly<{ status: "unsupported"; version: number }>;
|
|
62
|
+
|
|
63
|
+
export const BACKEND_CONNECTION_VERSION: 1;
|
|
64
|
+
export const BACKEND_TOKEN_VERSION: 1;
|
|
65
|
+
export const DEFAULT_BACKEND_URL: string;
|
|
66
|
+
|
|
67
|
+
export class BackendConnectionAuthorityError extends Error {
|
|
68
|
+
constructor(
|
|
69
|
+
state: Extract<BackendConnectionAuthorityState, { status: "invalid" | "unsupported" }>,
|
|
70
|
+
path: string,
|
|
71
|
+
);
|
|
72
|
+
readonly code:
|
|
73
|
+
| "BACKEND_CONNECTION_AUTHORITY_INVALID"
|
|
74
|
+
| "BACKEND_CONNECTION_AUTHORITY_UNSUPPORTED";
|
|
75
|
+
readonly authorityStatus: "invalid" | "unsupported";
|
|
76
|
+
readonly authorityPath: string;
|
|
77
|
+
readonly reason?: BackendConnectionAuthorityInvalidReason;
|
|
78
|
+
readonly version?: number;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export class BackendTokenRecordError extends RuntimeRecordError {
|
|
82
|
+
constructor(
|
|
83
|
+
state: Exclude<BackendTokenRecordState, { status: "valid" }>,
|
|
84
|
+
path: string,
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function backendConnectionPath(memoraxCodeHome?: string): string;
|
|
89
|
+
export function backendTokenPath(memoraxCodeHome?: string): string;
|
|
90
|
+
export function readBackendConnectionAuthority(memoraxCodeHome?: string): BackendConnectionAuthorityState;
|
|
91
|
+
export function writeBackendConnectionAuthority(options: {
|
|
92
|
+
memoraxCodeHome?: string;
|
|
93
|
+
url: string;
|
|
94
|
+
tokenPath?: string;
|
|
95
|
+
}, runtime?: RuntimeRecordWriteRuntime): RuntimeRecordWriteResult<BackendConnectionAuthority>;
|
|
96
|
+
export function readBackendTokenRecordState(memoraxCodeHome?: string): BackendTokenRecordState;
|
|
97
|
+
export function writeBackendTokenRecord(options: {
|
|
98
|
+
memoraxCodeHome?: string;
|
|
99
|
+
token: string;
|
|
100
|
+
createdAt: string;
|
|
101
|
+
rotatedAt?: string;
|
|
102
|
+
}, runtime?: RuntimeRecordWriteRuntime): RuntimeRecordWriteResult<BackendTokenRecord>;
|
|
103
|
+
export function resolveBackendConnection(options?: {
|
|
104
|
+
env?: Record<string, string | undefined>;
|
|
105
|
+
memoraxCodeHome?: string;
|
|
106
|
+
backendUrl?: string;
|
|
107
|
+
backendToken?: string;
|
|
108
|
+
}): BackendConnection;
|
|
109
|
+
export function localBackendRecoveryArguments(
|
|
110
|
+
connection: Pick<BackendConnection, "url" | "source">,
|
|
111
|
+
): string[] | undefined;
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { isAbsolute, join, resolve } from "node:path";
|
|
3
|
+
import {
|
|
4
|
+
readJsonRuntimeRecord,
|
|
5
|
+
RuntimeRecordError,
|
|
6
|
+
writePrivateJsonRecord,
|
|
7
|
+
} from "./runtime-record.mjs";
|
|
8
|
+
|
|
9
|
+
export const BACKEND_CONNECTION_VERSION = 1;
|
|
10
|
+
export const BACKEND_TOKEN_VERSION = 1;
|
|
11
|
+
export const DEFAULT_BACKEND_URL = "http://127.0.0.1:8787";
|
|
12
|
+
const BACKEND_CONNECTION_KEYS = new Set(["version", "url", "tokenPath"]);
|
|
13
|
+
const BACKEND_TOKEN_KEYS = new Set(["version", "token", "createdAt", "rotatedAt"]);
|
|
14
|
+
|
|
15
|
+
export class BackendConnectionAuthorityError extends Error {
|
|
16
|
+
constructor(state, path) {
|
|
17
|
+
const unsupported = state.status === "unsupported";
|
|
18
|
+
super(unsupported
|
|
19
|
+
? `Backend connection authority uses unsupported version ${state.version}: ${path}; pass an explicit Backend URL or --host/--port to recover`
|
|
20
|
+
: `Backend connection authority is invalid (${state.reason}): ${path}; pass an explicit Backend URL or --host/--port to recover`);
|
|
21
|
+
this.name = "BackendConnectionAuthorityError";
|
|
22
|
+
this.code = unsupported
|
|
23
|
+
? "BACKEND_CONNECTION_AUTHORITY_UNSUPPORTED"
|
|
24
|
+
: "BACKEND_CONNECTION_AUTHORITY_INVALID";
|
|
25
|
+
this.authorityStatus = state.status;
|
|
26
|
+
this.authorityPath = path;
|
|
27
|
+
if (unsupported) this.version = state.version;
|
|
28
|
+
else this.reason = state.reason;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class BackendTokenRecordError extends RuntimeRecordError {
|
|
33
|
+
constructor(state, path) {
|
|
34
|
+
super({
|
|
35
|
+
name: "Backend token record",
|
|
36
|
+
path,
|
|
37
|
+
state,
|
|
38
|
+
codePrefix: "BACKEND_TOKEN_RECORD",
|
|
39
|
+
recovery: state.status === "unsupported"
|
|
40
|
+
? "upgrade MemoraX Code or restore a supported token record"
|
|
41
|
+
: "stop the managed Backend and run `memorax-code token --rotate` to replace it",
|
|
42
|
+
});
|
|
43
|
+
this.name = "BackendTokenRecordError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function backendConnectionPath(memoraxCodeHome = defaultMemoraxCodeHome()) {
|
|
48
|
+
return join(memoraxCodeHome, "runtime", "backend", "backend-connection.json");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function backendTokenPath(memoraxCodeHome = defaultMemoraxCodeHome()) {
|
|
52
|
+
return join(memoraxCodeHome, "runtime", "backend", "backend-token.json");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function readBackendConnectionAuthority(memoraxCodeHome = defaultMemoraxCodeHome()) {
|
|
56
|
+
const path = backendConnectionPath(memoraxCodeHome);
|
|
57
|
+
const state = readJsonRuntimeRecord(path);
|
|
58
|
+
if (state.status !== "present") return state;
|
|
59
|
+
const value = state.value;
|
|
60
|
+
if (value.version !== BACKEND_CONNECTION_VERSION) {
|
|
61
|
+
if (Number.isSafeInteger(value.version) && value.version > 0) {
|
|
62
|
+
return { status: "unsupported", version: value.version };
|
|
63
|
+
}
|
|
64
|
+
return { status: "invalid", reason: "invalid_version" };
|
|
65
|
+
}
|
|
66
|
+
if (Object.keys(value).some((key) => !BACKEND_CONNECTION_KEYS.has(key))) {
|
|
67
|
+
return { status: "invalid", reason: "unknown_fields" };
|
|
68
|
+
}
|
|
69
|
+
const url = normalizedManagedBackendUrl(value.url);
|
|
70
|
+
if (!url) return { status: "invalid", reason: "invalid_url" };
|
|
71
|
+
let tokenPath;
|
|
72
|
+
if (Object.prototype.hasOwnProperty.call(value, "tokenPath")) {
|
|
73
|
+
tokenPath = canonicalTokenPath(value.tokenPath, memoraxCodeHome);
|
|
74
|
+
if (!tokenPath) return { status: "invalid", reason: "invalid_token_path" };
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
status: "valid",
|
|
78
|
+
authority: {
|
|
79
|
+
version: BACKEND_CONNECTION_VERSION,
|
|
80
|
+
url,
|
|
81
|
+
...(tokenPath ? { tokenPath } : {}),
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function writeBackendConnectionAuthority(options, runtime) {
|
|
87
|
+
const memoraxCodeHome = stringValue(options?.memoraxCodeHome) ?? defaultMemoraxCodeHome();
|
|
88
|
+
const url = normalizedManagedBackendUrl(options?.url);
|
|
89
|
+
if (!url) throw new Error("Backend connection authority requires a root HTTP URL");
|
|
90
|
+
const suppliedTokenPath = stringValue(options?.tokenPath);
|
|
91
|
+
const tokenPath = suppliedTokenPath
|
|
92
|
+
? canonicalTokenPath(suppliedTokenPath, memoraxCodeHome)
|
|
93
|
+
: undefined;
|
|
94
|
+
if (suppliedTokenPath && !tokenPath) {
|
|
95
|
+
throw new Error("Backend connection authority tokenPath must reference the canonical Backend token file");
|
|
96
|
+
}
|
|
97
|
+
const record = {
|
|
98
|
+
version: BACKEND_CONNECTION_VERSION,
|
|
99
|
+
url,
|
|
100
|
+
...(tokenPath ? { tokenPath } : {}),
|
|
101
|
+
};
|
|
102
|
+
const path = backendConnectionPath(memoraxCodeHome);
|
|
103
|
+
return writePrivateJsonRecord(path, record, {
|
|
104
|
+
...runtime,
|
|
105
|
+
durableBoundary: memoraxCodeHome,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function readBackendTokenRecordState(memoraxCodeHome = defaultMemoraxCodeHome()) {
|
|
110
|
+
const path = backendTokenPath(memoraxCodeHome);
|
|
111
|
+
const state = readJsonRuntimeRecord(path);
|
|
112
|
+
if (state.status !== "present") return state;
|
|
113
|
+
const value = state.value;
|
|
114
|
+
if (value.version !== BACKEND_TOKEN_VERSION) {
|
|
115
|
+
if (Number.isSafeInteger(value.version) && value.version > 0) {
|
|
116
|
+
return { status: "unsupported", version: value.version };
|
|
117
|
+
}
|
|
118
|
+
return { status: "invalid", reason: "invalid_version" };
|
|
119
|
+
}
|
|
120
|
+
if (Object.keys(value).some((key) => !BACKEND_TOKEN_KEYS.has(key))) {
|
|
121
|
+
return { status: "invalid", reason: "unknown_fields" };
|
|
122
|
+
}
|
|
123
|
+
const token = stringValue(value.token);
|
|
124
|
+
if (!token) return { status: "invalid", reason: "invalid_token" };
|
|
125
|
+
const createdAt = timestampValue(value.createdAt);
|
|
126
|
+
if (!createdAt) return { status: "invalid", reason: "invalid_created_at" };
|
|
127
|
+
let rotatedAt;
|
|
128
|
+
if (Object.prototype.hasOwnProperty.call(value, "rotatedAt")) {
|
|
129
|
+
rotatedAt = timestampValue(value.rotatedAt);
|
|
130
|
+
if (!rotatedAt) return { status: "invalid", reason: "invalid_rotated_at" };
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
status: "valid",
|
|
134
|
+
record: {
|
|
135
|
+
version: BACKEND_TOKEN_VERSION,
|
|
136
|
+
token,
|
|
137
|
+
createdAt,
|
|
138
|
+
...(rotatedAt ? { rotatedAt } : {}),
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function writeBackendTokenRecord(options, runtime) {
|
|
144
|
+
const memoraxCodeHome = stringValue(options?.memoraxCodeHome) ?? defaultMemoraxCodeHome();
|
|
145
|
+
const token = stringValue(options?.token);
|
|
146
|
+
if (!token) throw new TypeError("Backend token record requires a non-empty token");
|
|
147
|
+
const createdAt = timestampValue(options?.createdAt);
|
|
148
|
+
if (!createdAt) throw new TypeError("Backend token record requires a valid createdAt timestamp");
|
|
149
|
+
const suppliedRotatedAt = Object.prototype.hasOwnProperty.call(options ?? {}, "rotatedAt");
|
|
150
|
+
const rotatedAt = suppliedRotatedAt ? timestampValue(options.rotatedAt) : undefined;
|
|
151
|
+
if (suppliedRotatedAt && !rotatedAt) {
|
|
152
|
+
throw new TypeError("Backend token record rotatedAt must be a valid timestamp");
|
|
153
|
+
}
|
|
154
|
+
const record = {
|
|
155
|
+
version: BACKEND_TOKEN_VERSION,
|
|
156
|
+
token,
|
|
157
|
+
createdAt,
|
|
158
|
+
...(rotatedAt ? { rotatedAt } : {}),
|
|
159
|
+
};
|
|
160
|
+
return writePrivateJsonRecord(backendTokenPath(memoraxCodeHome), record, {
|
|
161
|
+
...runtime,
|
|
162
|
+
durableBoundary: memoraxCodeHome,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function resolveBackendConnection(options = {}) {
|
|
167
|
+
const env = options.env ?? process.env;
|
|
168
|
+
const memoraxCodeHome = stringValue(options.memoraxCodeHome)
|
|
169
|
+
?? stringValue(env.MEMORAX_CODE_HOME)
|
|
170
|
+
?? defaultMemoraxCodeHome();
|
|
171
|
+
const authorityPath = backendConnectionPath(memoraxCodeHome);
|
|
172
|
+
const authorityState = readBackendConnectionAuthority(memoraxCodeHome);
|
|
173
|
+
const authority = authorityState.status === "valid" ? authorityState.authority : undefined;
|
|
174
|
+
const selected = selectedBackendUrl(options.backendUrl, env, authorityState, authorityPath);
|
|
175
|
+
const tokenFromEnvironment = stringValue(options.backendToken)
|
|
176
|
+
?? stringValue(env.MEMORAX_CODE_BACKEND_TOKEN);
|
|
177
|
+
const authorityMatches = authority?.url === selected.url;
|
|
178
|
+
const persistedToken = !tokenFromEnvironment && authorityMatches && authority?.tokenPath
|
|
179
|
+
? readToken(authority.tokenPath, memoraxCodeHome)
|
|
180
|
+
: undefined;
|
|
181
|
+
const parsed = new URL(selected.url);
|
|
182
|
+
return {
|
|
183
|
+
memoraxCodeHome,
|
|
184
|
+
authorityPath,
|
|
185
|
+
authority,
|
|
186
|
+
url: selected.url,
|
|
187
|
+
source: selected.source,
|
|
188
|
+
host: stripIpv6Brackets(parsed.hostname),
|
|
189
|
+
port: Number(parsed.port || (parsed.protocol === "https:" ? "443" : "80")),
|
|
190
|
+
token: tokenFromEnvironment ?? persistedToken,
|
|
191
|
+
tokenSource: tokenFromEnvironment
|
|
192
|
+
? "environment"
|
|
193
|
+
: persistedToken
|
|
194
|
+
? "authority-file"
|
|
195
|
+
: "none",
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function localBackendRecoveryArguments(connection) {
|
|
200
|
+
let parsed;
|
|
201
|
+
try {
|
|
202
|
+
parsed = new URL(connection?.url);
|
|
203
|
+
} catch {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
if (parsed.protocol !== "http:"
|
|
207
|
+
|| parsed.username
|
|
208
|
+
|| parsed.password
|
|
209
|
+
|| parsed.pathname !== "/"
|
|
210
|
+
|| parsed.search
|
|
211
|
+
|| parsed.hash) return undefined;
|
|
212
|
+
const host = stripIpv6Brackets(parsed.hostname);
|
|
213
|
+
const port = Number(parsed.port || "80");
|
|
214
|
+
if (!host || !Number.isInteger(port) || port < 1 || port > 65535) return undefined;
|
|
215
|
+
if (!isLoopbackHost(host)) return undefined;
|
|
216
|
+
if (connection.source === "default" && connection.url === DEFAULT_BACKEND_URL) return [];
|
|
217
|
+
return ["--host", host, "--port", String(port)];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function selectedBackendUrl(explicitUrl, env, authorityState, authorityPath) {
|
|
221
|
+
const optionUrl = normalizedHttpUrl(explicitUrl);
|
|
222
|
+
if (optionUrl) return { url: optionUrl, source: "option" };
|
|
223
|
+
const environmentUrl = normalizedHttpUrl(stringValue(env.MEMORAX_CODE_BACKEND_URL));
|
|
224
|
+
if (environmentUrl) return { url: environmentUrl, source: "environment" };
|
|
225
|
+
const hostPortUrl = backendUrlFromHostPortEnv(env);
|
|
226
|
+
if (hostPortUrl) return { url: hostPortUrl, source: "environment" };
|
|
227
|
+
if (authorityState.status === "valid") {
|
|
228
|
+
return { url: authorityState.authority.url, source: "authority" };
|
|
229
|
+
}
|
|
230
|
+
if (authorityState.status === "absent") {
|
|
231
|
+
return { url: DEFAULT_BACKEND_URL, source: "default" };
|
|
232
|
+
}
|
|
233
|
+
throw new BackendConnectionAuthorityError(authorityState, authorityPath);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function backendUrlFromHostPortEnv(env) {
|
|
237
|
+
const rawHost = stringValue(env.MEMORAX_CODE_BACKEND_HOST);
|
|
238
|
+
const rawPort = stringValue(env.MEMORAX_CODE_BACKEND_PORT);
|
|
239
|
+
if (!rawHost && !rawPort) return undefined;
|
|
240
|
+
const host = rawHost ?? "127.0.0.1";
|
|
241
|
+
const port = rawPort ?? "8787";
|
|
242
|
+
const formattedHost = host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
|
|
243
|
+
return normalizedHttpUrl(`http://${formattedHost}:${port}`);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function normalizedHttpUrl(value) {
|
|
247
|
+
const candidate = stringValue(value);
|
|
248
|
+
if (!candidate) return undefined;
|
|
249
|
+
try {
|
|
250
|
+
const parsed = new URL(candidate);
|
|
251
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return undefined;
|
|
252
|
+
return parsed.toString().replace(/\/+$/, "");
|
|
253
|
+
} catch {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function normalizedManagedBackendUrl(value) {
|
|
259
|
+
const url = normalizedHttpUrl(value);
|
|
260
|
+
if (!url) return undefined;
|
|
261
|
+
const parsed = new URL(url);
|
|
262
|
+
if (parsed.protocol !== "http:"
|
|
263
|
+
|| parsed.username
|
|
264
|
+
|| parsed.password
|
|
265
|
+
|| parsed.pathname !== "/"
|
|
266
|
+
|| parsed.search
|
|
267
|
+
|| parsed.hash) return undefined;
|
|
268
|
+
return url;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function canonicalTokenPath(value, memoraxCodeHome) {
|
|
272
|
+
const candidate = stringValue(value);
|
|
273
|
+
if (!candidate || !isAbsolute(candidate)) return undefined;
|
|
274
|
+
const expected = resolve(backendTokenPath(memoraxCodeHome));
|
|
275
|
+
return resolve(candidate) === expected ? expected : undefined;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function readToken(path, memoraxCodeHome) {
|
|
279
|
+
const state = readBackendTokenRecordState(memoraxCodeHome);
|
|
280
|
+
if (state.status === "valid") return state.record.token;
|
|
281
|
+
throw new BackendTokenRecordError(state, path);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function defaultMemoraxCodeHome() {
|
|
285
|
+
return join(homedir(), ".memorax-code");
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function stripIpv6Brackets(host) {
|
|
289
|
+
return host.replace(/^\[|\]$/g, "");
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function isLoopbackHost(host) {
|
|
293
|
+
const normalized = stripIpv6Brackets(host.trim().toLowerCase());
|
|
294
|
+
return normalized === "localhost" || normalized === "127.0.0.1" || normalized === "::1";
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function stringValue(value) {
|
|
298
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function timestampValue(value) {
|
|
302
|
+
const candidate = stringValue(value);
|
|
303
|
+
return candidate && Number.isFinite(Date.parse(candidate)) ? candidate : undefined;
|
|
304
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { accessSync, constants, existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
export function resolveHookClaudeCommand({ env = process.env, pluginRoot } = {}) {
|
|
5
|
+
const explicit = stringValue(env.MEMORAX_CODE_CLAUDE_COMMAND);
|
|
6
|
+
if (explicit) return explicit;
|
|
7
|
+
|
|
8
|
+
const metadataCommand = readMetadataCommand(stringValue(pluginRoot) ?? stringValue(env.CLAUDE_PLUGIN_ROOT));
|
|
9
|
+
if (metadataCommand && commandPathExists(metadataCommand)) return metadataCommand;
|
|
10
|
+
|
|
11
|
+
return "claude";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function readMetadataCommand(pluginRoot) {
|
|
15
|
+
if (!pluginRoot) return undefined;
|
|
16
|
+
const path = join(pluginRoot, ".memorax-code-package.json");
|
|
17
|
+
if (!existsSync(path)) return undefined;
|
|
18
|
+
try {
|
|
19
|
+
const metadata = JSON.parse(readFileSync(path, "utf8"));
|
|
20
|
+
return stringValue(metadata.claudeCommand);
|
|
21
|
+
} catch {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function commandPathExists(command) {
|
|
27
|
+
if (!command.includes("/") && !command.includes("\\")) return true;
|
|
28
|
+
try {
|
|
29
|
+
accessSync(command, constants.X_OK);
|
|
30
|
+
return true;
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function stringValue(value) {
|
|
37
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
38
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { accessSync, constants, existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
export function resolveHookCodexCommand({ env = process.env, pluginRoot } = {}) {
|
|
5
|
+
const explicit = stringValue(env.MEMORAX_CODE_CODEX_COMMAND);
|
|
6
|
+
if (explicit) return explicit;
|
|
7
|
+
|
|
8
|
+
const configured = stringValue(env.CODEX_CLI_PATH);
|
|
9
|
+
if (configured) return configured;
|
|
10
|
+
|
|
11
|
+
const metadataCommand = readMetadataCommand(stringValue(pluginRoot) ?? stringValue(env.PLUGIN_ROOT));
|
|
12
|
+
if (metadataCommand && commandPathExists(metadataCommand)) return metadataCommand;
|
|
13
|
+
|
|
14
|
+
return "codex";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function readMetadataCommand(pluginRoot) {
|
|
18
|
+
if (!pluginRoot) return undefined;
|
|
19
|
+
const path = join(pluginRoot, ".memorax-code-package.json");
|
|
20
|
+
if (!existsSync(path)) return undefined;
|
|
21
|
+
try {
|
|
22
|
+
const metadata = JSON.parse(readFileSync(path, "utf8"));
|
|
23
|
+
return stringValue(metadata.codexCommand);
|
|
24
|
+
} catch {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function commandPathExists(command) {
|
|
30
|
+
if (!command.includes("/") && !command.includes("\\")) return true;
|
|
31
|
+
try {
|
|
32
|
+
accessSync(command, constants.X_OK);
|
|
33
|
+
return true;
|
|
34
|
+
} catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function stringValue(value) {
|
|
40
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
41
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
const MARKETPLACE_NAME = "memorax-code";
|
|
5
|
+
const PLUGIN_NAME = "memorax-code-codex-adapter";
|
|
6
|
+
const MEMORY_SKILL_NAME = "memorax-code";
|
|
7
|
+
|
|
8
|
+
export function isCompleteCodexPluginArtifact(pluginRoot) {
|
|
9
|
+
return existsSync(join(pluginRoot, ".codex-plugin", "plugin.json"))
|
|
10
|
+
&& existsSync(join(pluginRoot, "skills", MEMORY_SKILL_NAME, "SKILL.md"));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function activeCodexPluginRoot(codexHome) {
|
|
14
|
+
const cacheRoot = join(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME);
|
|
15
|
+
for (const version of directoryNames(cacheRoot).sort((left, right) => (
|
|
16
|
+
right.localeCompare(left, undefined, { numeric: true, sensitivity: "base" })
|
|
17
|
+
))) {
|
|
18
|
+
const pluginRoot = join(cacheRoot, version);
|
|
19
|
+
if (isCompleteCodexPluginArtifact(pluginRoot)) return pluginRoot;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function activeCodexPluginSkillsRoot(codexHome) {
|
|
25
|
+
const pluginRoot = activeCodexPluginRoot(codexHome);
|
|
26
|
+
return pluginRoot ? join(pluginRoot, "skills") : undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function directoryNames(rootPath) {
|
|
30
|
+
try {
|
|
31
|
+
return readdirSync(rootPath, { withFileTypes: true })
|
|
32
|
+
.filter((entry) => entry.isDirectory())
|
|
33
|
+
.map((entry) => entry.name);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (error?.code === "ENOENT") return [];
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type JsonFileLockOptions = Readonly<{
|
|
2
|
+
timeoutMs?: number;
|
|
3
|
+
staleMs?: number;
|
|
4
|
+
retryMs?: number;
|
|
5
|
+
}>;
|
|
6
|
+
|
|
7
|
+
export function readAdapterState(path: string): any;
|
|
8
|
+
export function readJsonFile(path: string): any;
|
|
9
|
+
export function readJsonValue(path: string): any;
|
|
10
|
+
export function readStdinJson(): Promise<any>;
|
|
11
|
+
export function injectClientHookInput(input: Record<string, unknown>): void;
|
|
12
|
+
export function sha256(value: string | NodeJS.ArrayBufferView): string;
|
|
13
|
+
export function stringOption(value: unknown): string | undefined;
|
|
14
|
+
export function atomicWriteJson(path: string, value: unknown): void;
|
|
15
|
+
export function atomicWriteText(path: string, value: string): void;
|
|
16
|
+
|
|
17
|
+
export function withJsonFileLock<T>(
|
|
18
|
+
path: string,
|
|
19
|
+
operation: () => T,
|
|
20
|
+
options?: JsonFileLockOptions,
|
|
21
|
+
): T;
|
|
22
|
+
|
|
23
|
+
export function withJsonFileLockAsync<T>(
|
|
24
|
+
path: string,
|
|
25
|
+
operation: () => T | Promise<T>,
|
|
26
|
+
options?: JsonFileLockOptions,
|
|
27
|
+
): Promise<T>;
|