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