@memorax/memorax-code 0.1.1 → 0.1.3
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/README.md +16 -12
- package/bin/memorax-code-npm-preinstall.mjs +7 -2
- package/bin/memorax-code-opencode.mjs +4 -0
- package/bin/memorax-code-plugin-postinstall.mjs +424 -108
- package/docs/configuration.md +153 -29
- package/docs/troubleshooting.md +93 -7
- package/lib/dsh-plugin-install.mjs +22 -0
- package/lib/memorax-code-adapter-common/src/hooks/capture-cwd-hook.mjs +21 -14
- package/lib/memorax-code-adapter-common/src/hooks/ensure-backend-runner.mjs +26 -7
- package/lib/memorax-code-adapter-common/src/hooks/memory-skill-reminder-hook.mjs +86 -95
- package/lib/memorax-code-adapter-common/src/hooks/memory-skill-reminder-policy.mjs +58 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-auto-build.mjs +38 -0
- package/lib/memorax-code-adapter-common/src/repo-memory/repo-memory-job-supervisor.mjs +1 -1
- package/lib/memorax-code-adapter-common/src/windows-cli-invocation.mjs +13 -1
- package/lib/memorax-code-backend/dist/app/backend-server.js +210 -0
- package/lib/memorax-code-backend/dist/{server-observability.js → app/memory-observability.js} +4 -4
- package/lib/memorax-code-backend/dist/{backend-state.js → app/state.js} +1 -1
- package/lib/memorax-code-backend/dist/{claude-adapter-lifecycle.js → clients/claude/lifecycle.js} +2 -2
- package/lib/memorax-code-backend/dist/{claude-memory-hook-runtime.js → clients/claude/memory-hook-runtime.js} +16 -9
- package/lib/memorax-code-backend/dist/clients/codex/lifecycle.js +131 -0
- package/lib/memorax-code-backend/dist/{codex-memory-hook-runtime.js → clients/codex/memory-hook-runtime.js} +18 -11
- package/lib/memorax-code-backend/dist/{codex-plugin-hooks.js → clients/codex/plugin-hooks.js} +1 -1
- package/lib/memorax-code-backend/dist/{codex-plugin-install.js → clients/codex/plugin-install.js} +6 -6
- package/lib/memorax-code-backend/dist/clients/dsh/lifecycle.js +75 -0
- package/lib/memorax-code-backend/dist/clients/dsh/memory-hook-runtime.js +258 -0
- package/lib/memorax-code-backend/dist/clients/dsh/session-turn.js +249 -0
- package/lib/memorax-code-backend/dist/clients/opencode/lifecycle.js +54 -0
- package/lib/memorax-code-backend/dist/clients/opencode/memory-hook-runtime.js +277 -0
- package/lib/memorax-code-backend/dist/clients/opencode/message-turn.js +78 -0
- package/lib/memorax-code-backend/dist/codex-adapter-lifecycle.js +1 -131
- package/lib/memorax-code-backend/dist/{memorax-code-config.js → config/memorax-code.js} +32 -4
- package/lib/memorax-code-backend/dist/{server-cli.js → entrypoints/backend-cli.js} +157 -34
- package/lib/memorax-code-backend/dist/jsonl-append.js +1 -75
- package/lib/memorax-code-backend/dist/{active-client-selection.js → lifecycle/active-clients.js} +12 -1
- package/lib/memorax-code-backend/dist/{backend-service-cleanup.js → lifecycle/backend/cleanup.js} +1 -1
- package/lib/memorax-code-backend/dist/{backend-service-record.js → lifecycle/backend/record.js} +1 -1
- package/lib/memorax-code-backend/dist/{backend-service-result.js → lifecycle/backend/result.js} +2 -2
- package/lib/memorax-code-backend/dist/{service.js → lifecycle/backend/service.js} +16 -16
- package/lib/memorax-code-backend/dist/{backend-token-record.js → lifecycle/backend/token-record.js} +1 -1
- package/lib/memorax-code-backend/dist/{backend-service-token.js → lifecycle/backend/token.js} +2 -2
- package/lib/memorax-code-backend/dist/lifecycle/client-plugin-removal.js +109 -0
- package/lib/memorax-code-backend/dist/{client-selection.js → lifecycle/client-selection.js} +11 -5
- package/lib/memorax-code-backend/dist/{backend-lifecycle-lock.js → lifecycle/lock.js} +1 -1
- package/lib/memorax-code-backend/dist/{memorax-code-lifecycle.js → lifecycle/orchestrator.js} +325 -39
- package/lib/memorax-code-backend/dist/memorax-cli.js +3 -1
- package/lib/memorax-code-backend/dist/memorax-code.js +1 -1
- package/lib/memorax-code-backend/dist/{automatic-memory-retrieval.js → memory/automatic-retrieval.js} +3 -3
- package/lib/memorax-code-backend/dist/{automatic-memory-writeback.js → memory/automatic-writeback.js} +82 -21
- package/lib/memorax-code-backend/dist/{memory-cli.js → memory/cli.js} +45 -10
- package/lib/memorax-code-backend/dist/{memory-hook-command.js → memory/hook-command.js} +156 -9
- package/lib/memorax-code-backend/dist/memory/observability.js +1 -0
- package/lib/memorax-code-backend/dist/memory/payload-redaction.js +212 -0
- package/lib/memorax-code-backend/dist/{memory-reminder-trace-recorder.js → memory/reminder-trace-recorder.js} +20 -7
- package/lib/memorax-code-backend/dist/{repository-memory-context.js → memory/repository-session.js} +25 -4
- package/lib/memorax-code-backend/dist/{memory-service.js → memory/service.js} +30 -6
- package/lib/memorax-code-backend/dist/{memory-turn-coordinator.js → memory/turn-coordinator.js} +7 -3
- package/lib/memorax-code-backend/dist/{memory-writeback-buffer.js → memory/writeback-buffer.js} +31 -2
- package/lib/memorax-code-backend/dist/{memory-writeback-chunk.js → memory/writeback-chunk.js} +1 -1
- package/lib/memorax-code-backend/dist/{memory-writeback-reconciler.js → memory/writeback-reconciler.js} +6 -6
- package/lib/memorax-code-backend/dist/{memory-writeback-task-projection.js → memory/writeback-task-projection.js} +4 -4
- package/lib/memorax-code-backend/dist/{memorax-adapter.js → provider/memorax/adapter.js} +5 -5
- package/lib/memorax-code-backend/dist/{memorax-config.js → provider/memorax/config.js} +4 -4
- package/lib/memorax-code-backend/dist/{memorax-http.js → provider/memorax/http.js} +1 -1
- package/lib/memorax-code-backend/dist/{repo-memory-readiness.js → repository/readiness.js} +3 -3
- package/lib/memorax-code-backend/dist/{repository-memory-scope.js → repository/scope.js} +81 -33
- package/lib/memorax-code-backend/dist/server.js +3 -212
- package/lib/memorax-code-backend/dist/service-entrypoint.js +1 -1
- package/lib/memorax-code-backend/dist/{debug-log.js → shared/debug-log.js} +1 -1
- package/lib/memorax-code-backend/dist/shared/jsonl-append.js +75 -0
- package/lib/memorax-code-backend/dist/shared/windows-cli-invocation.js +148 -0
- package/lib/memorax-code-backend/dist/{trace-config.js → trace/config.js} +43 -5
- package/lib/memorax-code-backend/dist/{trace-context.js → trace/context.js} +53 -2
- package/lib/memorax-code-backend/dist/{trace-store.js → trace/store.js} +3 -3
- package/lib/memorax-code-backend/dist/{server-health.js → transport/http/health.js} +1 -1
- package/lib/memorax-code-backend/dist/{server-memory-hook.js → transport/http/memory-hook.js} +3 -3
- package/lib/memorax-code-backend/dist/{server-http.js → transport/http/request.js} +1 -1
- package/lib/memorax-code-backend/dist/{claude-local-transcript.js → viewer/history/claude-transcript.js} +3 -3
- package/lib/memorax-code-backend/dist/{memory-viewer-session-title.js → viewer/history/session-title.js} +1 -1
- package/lib/memorax-code-backend/dist/{server-memory-viewer.js → viewer/http/public-routes.js} +25 -14
- package/lib/memorax-code-backend/dist/viewer/model.js +1 -0
- package/lib/memorax-code-backend/dist/{memory-viewer-activity.js → viewer/projection/activity.js} +2 -2
- package/lib/memorax-code-backend/dist/{memory-viewer-history-projection.js → viewer/projection/history.js} +1 -1
- package/lib/memorax-code-backend/dist/{memory-viewer-observability.js → viewer/projection/observability.js} +1 -1
- package/lib/memorax-code-backend/dist/{memory-viewer-user-projection.js → viewer/projection/user.js} +1 -1
- package/lib/memorax-code-backend/dist/{memory-viewer-writeback-status.js → viewer/projection/writeback-status.js} +1 -1
- package/lib/memorax-code-backend/dist/{memory-viewer-store.js → viewer/store.js} +59 -32
- package/lib/memorax-code-backend/dist/viewer/ui/icon.js +1 -0
- package/lib/memorax-code-backend/dist/{memory-viewer-user-html.js → viewer/ui/user-html.js} +14 -12
- package/lib/memorax-code-backend/dist/windows-cli-invocation.js +1 -148
- package/lib/memorax-code-backend/package.json +3 -3
- package/lib/memorax-code-claude-adapter/.claude-plugin/plugin.json +1 -1
- package/lib/memorax-code-claude-adapter/hooks/runtime-shell.json +1 -1
- package/lib/memorax-code-claude-adapter/package.json +1 -1
- package/lib/memorax-code-claude-adapter/runtime-hooks/memory-turn.mjs +5 -0
- package/lib/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +23 -15
- package/lib/memorax-code-claude-adapter/skills/memorax-code/defaults.json +8 -5
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +5 -1
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +40 -10
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/personal-read.md +1 -1
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/personal-write.md +33 -13
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-build.md +62 -13
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-read.md +11 -4
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-templates.md +179 -59
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/repo-update.md +18 -7
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/collect_all.py +122 -39
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/detect_updates.py +73 -10
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/github_resource_facets.py +9 -1
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +9 -1
- package/lib/memorax-code-claude-adapter/skills/memorax-code/scripts/validate_memory.py +23 -1
- package/lib/memorax-code-claude-adapter/src/plugin-install.mjs +2 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/.claude-plugin/plugin.json +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-shell.json +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/capture-cwd-hook.mjs +21 -14
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/ensure-backend-runner.mjs +26 -7
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/memory-skill-reminder-hook.mjs +86 -95
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/hooks/memory-skill-reminder-policy.mjs +58 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-auto-build.mjs +38 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/repo-memory/repo-memory-job-supervisor.mjs +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/memorax-code-adapter-common/src/windows-cli-invocation.mjs +13 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/package.json +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/runtime-hooks/memory-turn.mjs +5 -0
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +23 -15
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/defaults.json +8 -5
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +5 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +40 -10
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/personal-read.md +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/personal-write.md +33 -13
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-build.md +62 -13
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-read.md +11 -4
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-templates.md +179 -59
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/repo-update.md +18 -7
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/collect_all.py +122 -39
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/detect_updates.py +73 -10
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/github_resource_facets.py +9 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +9 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/scripts/validate_memory.py +23 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/src/plugin-install.mjs +2 -0
- package/lib/memorax-code-codex-adapter/.codex-plugin/plugin.json +1 -1
- package/lib/memorax-code-codex-adapter/hooks/runtime-shell.json +1 -1
- package/lib/memorax-code-codex-adapter/package.json +1 -1
- package/lib/memorax-code-codex-adapter/runtime-hooks/memory-skill-reminder.mjs +16 -2
- package/lib/memorax-code-codex-adapter/skills/memorax-code/SKILL.md +23 -15
- package/lib/memorax-code-codex-adapter/skills/memorax-code/defaults.json +8 -5
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-add.md +5 -1
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-search.md +40 -10
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/personal-read.md +1 -1
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/personal-write.md +33 -13
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-build.md +62 -13
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-read.md +11 -4
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-templates.md +179 -59
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/repo-update.md +18 -7
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/collect_all.py +122 -39
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/detect_updates.py +73 -10
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/github_resource_facets.py +9 -1
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +9 -1
- package/lib/memorax-code-codex-adapter/skills/memorax-code/scripts/validate_memory.py +23 -1
- package/lib/memorax-code-dsh-adapter/cordis.patch.yml +10 -0
- package/lib/memorax-code-dsh-adapter/hooks/repo-memory-job.mjs +68 -0
- package/lib/memorax-code-dsh-adapter/package.json +69 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/SKILL.md +91 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/agents/claude.yaml +10 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/agents/openai.yaml +7 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/defaults.json +12 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/memorax-add.md +86 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/memorax-search.md +91 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/personal-read.md +46 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/personal-write.md +120 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/repo-build.md +319 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/repo-read.md +103 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/repo-templates.md +390 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/repo-update.md +127 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/collect_all.py +579 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/detect_updates.py +919 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/github_resource_facets.py +512 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +517 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/scripts/validate_memory.py +248 -0
- package/lib/memorax-code-dsh-adapter/src/backend-client.mjs +119 -0
- package/lib/memorax-code-dsh-adapter/src/dsh-message.mjs +32 -0
- package/lib/memorax-code-dsh-adapter/src/dsh-version.mjs +18 -0
- package/lib/memorax-code-dsh-adapter/src/http-client.mjs +55 -0
- package/lib/memorax-code-dsh-adapter/src/index.mjs +72 -0
- package/lib/memorax-code-dsh-adapter/src/personal-context-worker.mjs +48 -0
- package/lib/memorax-code-dsh-adapter/src/personal-context.mjs +114 -0
- package/lib/memorax-code-dsh-adapter/src/plugin.mjs +724 -0
- package/lib/memorax-code-dsh-adapter/src/profile-lifecycle.mjs +1289 -0
- package/lib/memorax-code-dsh-adapter/src/protocol.mjs +145 -0
- package/lib/memorax-code-dsh-adapter/src/runtime-state.mjs +132 -0
- package/lib/memorax-code-opencode-adapter/hooks/repo-memory-job.mjs +37 -0
- package/lib/memorax-code-opencode-adapter/package.json +10 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/SKILL.md +91 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/agents/claude.yaml +10 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/agents/openai.yaml +7 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/defaults.json +12 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/memorax-add.md +86 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/memorax-search.md +91 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/personal-read.md +46 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/personal-write.md +120 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/repo-build.md +319 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/repo-read.md +103 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/repo-templates.md +390 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/repo-update.md +127 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/collect_all.py +579 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/detect_updates.py +919 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/git_commit_facets.py +222 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/github_resource_facets.py +512 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/gitlab_resource_facets.py +517 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/prepare_repo_memory.py +411 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/user_profile_memory.py +528 -0
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/scripts/validate_memory.py +248 -0
- package/lib/memorax-code-opencode-adapter/src/adapter-paths.mjs +37 -0
- package/lib/memorax-code-opencode-adapter/src/cli.mjs +260 -0
- package/lib/memorax-code-opencode-adapter/src/diagnostics.mjs +31 -0
- package/lib/memorax-code-opencode-adapter/src/plugin-install.mjs +673 -0
- package/lib/memorax-code-opencode-adapter/src/plugin.mjs +536 -0
- package/lib/memorax-code-opencode-adapter/src/repo-memory-server-runner.mjs +207 -0
- package/lib/resolve-claude-command.mjs +154 -1
- package/lib/resolve-codex-command.mjs +56 -1
- package/lib/run-entrypoint.mjs +6 -0
- package/package.json +7 -3
- package/lib/memorax-code-backend/dist/client-plugin-removal.js +0 -67
- /package/lib/memorax-code-backend/dist/{claude-transcript-turn.js → clients/claude/transcript-turn.js} +0 -0
- /package/lib/memorax-code-backend/dist/{codex-effective-prompt.js → clients/codex/effective-prompt.js} +0 -0
- /package/lib/memorax-code-backend/dist/{codex-rollout-turn.js → clients/codex/rollout-turn.js} +0 -0
- /package/lib/memorax-code-backend/dist/{codex-session-turn-index.js → clients/codex/session-turn-index.js} +0 -0
- /package/lib/memorax-code-backend/dist/{codex-workspace-links.js → clients/codex/workspace-links.js} +0 -0
- /package/lib/memorax-code-backend/dist/{backend-env.js → config/backend-env.js} +0 -0
- /package/lib/memorax-code-backend/dist/{proxy-env.js → config/proxy-env.js} +0 -0
- /package/lib/memorax-code-backend/dist/{entrypoint.js → entrypoints/main.js} +0 -0
- /package/lib/memorax-code-backend/dist/{backend-process.js → lifecycle/backend/process.js} +0 -0
- /package/lib/memorax-code-backend/dist/{backend-shutdown-request.js → lifecycle/backend/shutdown-request.js} +0 -0
- /package/lib/memorax-code-backend/dist/{backend-status.js → lifecycle/backend/status.js} +0 -0
- /package/lib/memorax-code-backend/dist/{adapter-lifecycle-participant.js → lifecycle/contracts.js} +0 -0
- /package/lib/memorax-code-backend/dist/{install-watchdog.js → lifecycle/install-watchdog.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-observability.js → lifecycle/participant.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-project.js → memory/project.js} +0 -0
- /package/lib/memorax-code-backend/dist/{incremental-jsonl-projection.js → shared/incremental-jsonl-projection.js} +0 -0
- /package/lib/memorax-code-backend/dist/{utils.js → shared/record.js} +0 -0
- /package/lib/memorax-code-backend/dist/{server-json.js → transport/http/json.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-viewer-data-projection-cache.js → viewer/projection/cache.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-viewer-event-identity.js → viewer/projection/event-identity.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-viewer-redaction.js → viewer/projection/redaction.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-viewer-turn-reference.js → viewer/projection/turn-reference.js} +0 -0
- /package/lib/memorax-code-backend/dist/{memory-viewer-logo.js → viewer/ui/logo.js} +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export function resolveWindowsCliInvocation(command, args, options = {}) {
|
|
5
|
+
const platform = options.platform ?? process.platform;
|
|
6
|
+
if (platform !== "win32")
|
|
7
|
+
return { command, args };
|
|
8
|
+
const pathApi = path.win32;
|
|
9
|
+
const fileExists = options.existsSync ?? existsSync;
|
|
10
|
+
const env = options.env ?? process.env;
|
|
11
|
+
let resolvedCommand = options.resolvedCommand;
|
|
12
|
+
if (!resolvedCommand && !/[\\/]/.test(command)) {
|
|
13
|
+
const located = options.whereOutput === undefined
|
|
14
|
+
? (options.spawnSync ?? spawnSync)("where.exe", [command], {
|
|
15
|
+
env,
|
|
16
|
+
encoding: "utf8",
|
|
17
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
18
|
+
windowsHide: true,
|
|
19
|
+
})
|
|
20
|
+
: { status: 0, stdout: options.whereOutput };
|
|
21
|
+
if (located.status === 0) {
|
|
22
|
+
resolvedCommand = selectWindowsCommandCandidate(command, located.stdout);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
resolvedCommand ??= command;
|
|
26
|
+
if (/\.(?:exe|com)$/i.test(resolvedCommand))
|
|
27
|
+
return { command: resolvedCommand, args };
|
|
28
|
+
if (!/\.(?:cmd|bat)$/i.test(resolvedCommand)) {
|
|
29
|
+
throw new Error(`refusing to execute unsupported Windows command shim: ${resolvedCommand}`);
|
|
30
|
+
}
|
|
31
|
+
const name = pathApi.basename(resolvedCommand).replace(/\.(?:cmd|bat)$/i, "").toLowerCase();
|
|
32
|
+
const nativeCli = nativeCliEntrypointCandidates(name, resolvedCommand, env, pathApi)
|
|
33
|
+
.filter(isNativeEntrypoint)
|
|
34
|
+
.find((candidate) => fileExists(candidate));
|
|
35
|
+
if (nativeCli)
|
|
36
|
+
return { command: nativeCli, args };
|
|
37
|
+
const cli = cliEntrypointCandidates(name, resolvedCommand, env, pathApi)
|
|
38
|
+
.filter(isNodeEntrypoint)
|
|
39
|
+
.find((candidate) => fileExists(candidate));
|
|
40
|
+
if (!cli) {
|
|
41
|
+
const override = name === "claude" ? "MEMORAX_CODE_CLAUDE_CLI_JS" : "MEMORAX_CODE_CODEX_CLI_JS";
|
|
42
|
+
throw new Error(`refusing to execute ${pathApi.basename(resolvedCommand)} through a command shell; `
|
|
43
|
+
+ `set ${override} to its Node entrypoint`);
|
|
44
|
+
}
|
|
45
|
+
return { command: options.nodePath ?? process.execPath, args: [cli, ...args] };
|
|
46
|
+
}
|
|
47
|
+
function nativeCliEntrypointCandidates(name, command, env, pathApi) {
|
|
48
|
+
if (name !== "claude")
|
|
49
|
+
return [];
|
|
50
|
+
const root = pathApi.dirname(command);
|
|
51
|
+
return [
|
|
52
|
+
env.MEMORAX_CODE_CLAUDE_CLI_EXE,
|
|
53
|
+
env.CLAUDE_CLI_EXE,
|
|
54
|
+
pathApi.join(root, "node_modules", "@anthropic-ai", "claude-code", "bin", "claude.exe"),
|
|
55
|
+
pathApi.join(root, "..", "@anthropic-ai", "claude-code", "bin", "claude.exe"),
|
|
56
|
+
].filter((candidate) => typeof candidate === "string");
|
|
57
|
+
}
|
|
58
|
+
function cliEntrypointCandidates(name, command, env, pathApi) {
|
|
59
|
+
const root = pathApi.dirname(command);
|
|
60
|
+
if (name === "codex") {
|
|
61
|
+
return [
|
|
62
|
+
env.MEMORAX_CODE_CODEX_CLI_JS,
|
|
63
|
+
env.CODEX_CLI_JS,
|
|
64
|
+
pathApi.join(root, "node_modules", "@openai", "codex", "bin", "codex.js"),
|
|
65
|
+
pathApi.join(root, "..", "@openai", "codex", "bin", "codex.js"),
|
|
66
|
+
].filter((candidate) => typeof candidate === "string");
|
|
67
|
+
}
|
|
68
|
+
if (name === "claude") {
|
|
69
|
+
return [
|
|
70
|
+
env.MEMORAX_CODE_CLAUDE_CLI_JS,
|
|
71
|
+
env.CLAUDE_CLI_JS,
|
|
72
|
+
pathApi.join(root, "node_modules", "@anthropic-ai", "claude-code", "cli.js"),
|
|
73
|
+
pathApi.join(root, "..", "@anthropic-ai", "claude-code", "cli.js"),
|
|
74
|
+
].filter((candidate) => typeof candidate === "string");
|
|
75
|
+
}
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
function isNativeEntrypoint(value) {
|
|
79
|
+
return /\.(?:exe|com)$/i.test(value);
|
|
80
|
+
}
|
|
81
|
+
function isNodeEntrypoint(value) {
|
|
82
|
+
return /\.(?:cjs|js|mjs)$/i.test(value);
|
|
83
|
+
}
|
|
84
|
+
export function selectWindowsCommandCandidate(command, output) {
|
|
85
|
+
const candidates = String(output ?? "")
|
|
86
|
+
.split(/\r?\n/)
|
|
87
|
+
.map((value) => value.trim())
|
|
88
|
+
.filter(Boolean);
|
|
89
|
+
const selected = candidates.find((value) => /\.(?:cmd|bat)$/i.test(value))
|
|
90
|
+
?? candidates.find((value) => /\.(?:exe|com)$/i.test(value));
|
|
91
|
+
if (!selected) {
|
|
92
|
+
throw new Error(`where.exe did not return a safe executable or command shim for ${command}`);
|
|
93
|
+
}
|
|
94
|
+
return selected;
|
|
95
|
+
}
|
|
96
|
+
export function resolveWindowsNpmInvocation(args, env, options = {}) {
|
|
97
|
+
const platform = options.platform ?? process.platform;
|
|
98
|
+
if (platform !== "win32")
|
|
99
|
+
return { command: "npm", args };
|
|
100
|
+
const nodePath = options.nodePath ?? process.execPath;
|
|
101
|
+
const fileExists = options.existsSync ?? existsSync;
|
|
102
|
+
const candidates = [
|
|
103
|
+
env.MEMORAX_CODE_NPM_EXEC_PATH,
|
|
104
|
+
env.npm_execpath,
|
|
105
|
+
env.NPM_CLI_JS,
|
|
106
|
+
path.win32.join(path.win32.dirname(nodePath), "node_modules", "npm", "bin", "npm-cli.js"),
|
|
107
|
+
path.win32.join(path.win32.dirname(path.win32.dirname(nodePath)), "lib", "node_modules", "npm", "bin", "npm-cli.js"),
|
|
108
|
+
].filter((candidate) => (typeof candidate === "string" && /\.(?:cjs|js|mjs)$/i.test(candidate)));
|
|
109
|
+
const npmCli = candidates.find((candidate) => fileExists(candidate));
|
|
110
|
+
if (!npmCli) {
|
|
111
|
+
throw new Error("npm CLI JavaScript entrypoint was not found; set MEMORAX_CODE_NPM_EXEC_PATH, "
|
|
112
|
+
+ "npm_execpath, or NPM_CLI_JS");
|
|
113
|
+
}
|
|
114
|
+
return { command: nodePath, args: [npmCli, ...args] };
|
|
115
|
+
}
|
|
116
|
+
export function runProcessWithWindowsNpm(command, args, options) {
|
|
117
|
+
return new Promise((resolveResult) => {
|
|
118
|
+
let invocation = { command, args };
|
|
119
|
+
try {
|
|
120
|
+
if (command === "npm") {
|
|
121
|
+
invocation = resolveWindowsNpmInvocation(args, options.env);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
resolveResult({
|
|
126
|
+
ok: false,
|
|
127
|
+
stdout: "",
|
|
128
|
+
stderr: error instanceof Error ? error.message : String(error),
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const child = spawn(invocation.command, invocation.args, {
|
|
133
|
+
cwd: options.cwd,
|
|
134
|
+
env: options.env,
|
|
135
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
136
|
+
});
|
|
137
|
+
let stdout = "";
|
|
138
|
+
let stderr = "";
|
|
139
|
+
child.stdout.on("data", (chunk) => { stdout += String(chunk); });
|
|
140
|
+
child.stderr.on("data", (chunk) => { stderr += String(chunk); });
|
|
141
|
+
child.on("error", (error) => {
|
|
142
|
+
resolveResult({ ok: false, stdout, stderr: stderr || error.message });
|
|
143
|
+
});
|
|
144
|
+
child.on("close", (code) => {
|
|
145
|
+
resolveResult({ ok: code === 0, stdout, stderr });
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { loadMemoraxCodeConfig } from "
|
|
5
|
-
import { isTraceClient } from "./
|
|
6
|
-
export const TRACE_CLIENTS = ["codex", "claude"];
|
|
4
|
+
import { loadMemoraxCodeConfig } from "../config/memorax-code.js";
|
|
5
|
+
import { isTraceClient } from "./context.js";
|
|
6
|
+
export const TRACE_CLIENTS = ["codex", "claude", "dsh", "opencode"];
|
|
7
7
|
export const CODEX_TRACE_DEFAULT_CONFIG = {
|
|
8
8
|
enabled: true,
|
|
9
9
|
captureContent: true,
|
|
@@ -18,6 +18,32 @@ export const CLAUDE_TRACE_DEFAULT_CONFIG = {
|
|
|
18
18
|
maxEventChars: 20_000,
|
|
19
19
|
maxFileBytes: 52_428_800,
|
|
20
20
|
};
|
|
21
|
+
export const DSH_TRACE_DEFAULT_CONFIG = {
|
|
22
|
+
enabled: true,
|
|
23
|
+
captureContent: true,
|
|
24
|
+
retentionDays: 7,
|
|
25
|
+
maxEventChars: 20_000,
|
|
26
|
+
maxFileBytes: 52_428_800,
|
|
27
|
+
};
|
|
28
|
+
export const OPENCODE_TRACE_DEFAULT_CONFIG = {
|
|
29
|
+
enabled: true,
|
|
30
|
+
captureContent: true,
|
|
31
|
+
retentionDays: 7,
|
|
32
|
+
maxEventChars: 20_000,
|
|
33
|
+
maxFileBytes: 52_428_800,
|
|
34
|
+
};
|
|
35
|
+
const TRACE_DEFAULT_CONFIGS = {
|
|
36
|
+
codex: CODEX_TRACE_DEFAULT_CONFIG,
|
|
37
|
+
claude: CLAUDE_TRACE_DEFAULT_CONFIG,
|
|
38
|
+
dsh: DSH_TRACE_DEFAULT_CONFIG,
|
|
39
|
+
opencode: OPENCODE_TRACE_DEFAULT_CONFIG,
|
|
40
|
+
};
|
|
41
|
+
const TRACE_ENV_PREFIXES = {
|
|
42
|
+
codex: "MEMORAX_CODE_CODEX_TRACE",
|
|
43
|
+
claude: "MEMORAX_CODE_CLAUDE_TRACE",
|
|
44
|
+
dsh: "MEMORAX_CODE_DSH_TRACE",
|
|
45
|
+
opencode: "MEMORAX_CODE_OPENCODE_TRACE",
|
|
46
|
+
};
|
|
21
47
|
export const TRACE_CLEANUP_DEBOUNCE_MS = 60 * 60 * 1000;
|
|
22
48
|
export const TRACE_CURRENT_TURN_TTL_MS = 30 * 60 * 1000;
|
|
23
49
|
export const CODEX_TRACE_CLEANUP_DEBOUNCE_MS = TRACE_CLEANUP_DEBOUNCE_MS;
|
|
@@ -30,12 +56,18 @@ export function codexTraceConfigFromEnv(env = process.env, fileConfig) {
|
|
|
30
56
|
export function claudeTraceConfigFromEnv(env = process.env, fileConfig) {
|
|
31
57
|
return clientTraceConfigFromEnv("claude", env, fileConfig);
|
|
32
58
|
}
|
|
59
|
+
export function dshTraceConfigFromEnv(env = process.env, fileConfig) {
|
|
60
|
+
return clientTraceConfigFromEnv("dsh", env, fileConfig);
|
|
61
|
+
}
|
|
62
|
+
export function openCodeTraceConfigFromEnv(env = process.env, fileConfig) {
|
|
63
|
+
return clientTraceConfigFromEnv("opencode", env, fileConfig);
|
|
64
|
+
}
|
|
33
65
|
export function clientTraceConfigFromEnv(client, env = process.env, fileConfig) {
|
|
34
66
|
assertTraceClient(client);
|
|
35
67
|
const config = fileConfig ?? loadMemoraxCodeConfig(memoraxCodeHomeForTrace(env), { warn: () => undefined });
|
|
36
68
|
const section = config.trace?.[client];
|
|
37
|
-
const defaults = client
|
|
38
|
-
const prefix = client
|
|
69
|
+
const defaults = TRACE_DEFAULT_CONFIGS[client];
|
|
70
|
+
const prefix = TRACE_ENV_PREFIXES[client];
|
|
39
71
|
return {
|
|
40
72
|
enabled: booleanValue(env[`${prefix}_ENABLED`], section?.enabled ?? defaults.enabled),
|
|
41
73
|
captureContent: booleanValue(env[`${prefix}_CAPTURE_CONTENT`], section?.capture_content ?? defaults.captureContent),
|
|
@@ -53,6 +85,12 @@ export function tracePaths(memoraxCodeHome = memoraxCodeHomeForTrace(process.env
|
|
|
53
85
|
export function claudeTracePaths(memoraxCodeHome = memoraxCodeHomeForTrace(process.env)) {
|
|
54
86
|
return clientTracePaths("claude", memoraxCodeHome);
|
|
55
87
|
}
|
|
88
|
+
export function dshTracePaths(memoraxCodeHome = memoraxCodeHomeForTrace(process.env)) {
|
|
89
|
+
return clientTracePaths("dsh", memoraxCodeHome);
|
|
90
|
+
}
|
|
91
|
+
export function openCodeTracePaths(memoraxCodeHome = memoraxCodeHomeForTrace(process.env)) {
|
|
92
|
+
return clientTracePaths("opencode", memoraxCodeHome);
|
|
93
|
+
}
|
|
56
94
|
export function clientTracePaths(client, memoraxCodeHome = memoraxCodeHomeForTrace(process.env)) {
|
|
57
95
|
assertTraceClient(client);
|
|
58
96
|
const root = join(memoraxCodeHome, "debug", "traces", client);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { memoryProjectFromUnknown, resolveMemoryProject, } from "
|
|
1
|
+
import { memoryProjectFromUnknown, resolveMemoryProject, } from "../memory/project.js";
|
|
2
2
|
export function traceContextFromHookBody(body, capturedAt = new Date().toISOString()) {
|
|
3
3
|
if (!isRecord(body))
|
|
4
4
|
return undefined;
|
|
@@ -42,6 +42,35 @@ export function traceContextFromClaudeHookBody(body, capturedAt = new Date().toI
|
|
|
42
42
|
capturedAt,
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
+
export function traceContextFromOpenCodeHookBody(body, capturedAt = new Date().toISOString()) {
|
|
46
|
+
if (!isRecord(body))
|
|
47
|
+
return undefined;
|
|
48
|
+
const sessionId = stringField(body, "sessionId");
|
|
49
|
+
const turnId = stringField(body, "userMessageId");
|
|
50
|
+
if (!sessionId || !turnId)
|
|
51
|
+
return undefined;
|
|
52
|
+
const cwd = stringField(body, "cwd");
|
|
53
|
+
return pruneTraceContext({
|
|
54
|
+
schemaVersion: "1",
|
|
55
|
+
client: "opencode",
|
|
56
|
+
sessionId,
|
|
57
|
+
turnId,
|
|
58
|
+
cwd,
|
|
59
|
+
memoryProject: resolveMemoryProject(cwd),
|
|
60
|
+
workspaceKind: stringField(body, "workspaceKind"),
|
|
61
|
+
contextOrigin: "opencode-hook-body",
|
|
62
|
+
capturedAt,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function traceContextFromDshTurnStart(body, capturedAt = new Date().toISOString()) {
|
|
66
|
+
return traceContextFromDshBody(body, "dsh-cordis-turn-start", capturedAt);
|
|
67
|
+
}
|
|
68
|
+
export function traceContextFromDshSkillReminder(body, capturedAt = new Date().toISOString()) {
|
|
69
|
+
return traceContextFromDshBody(body, "dsh-cordis-reminder", capturedAt);
|
|
70
|
+
}
|
|
71
|
+
export function traceContextFromDshSessionEventLog(body, capturedAt = new Date().toISOString()) {
|
|
72
|
+
return traceContextFromDshBody(body, "dsh-session-event-log", capturedAt);
|
|
73
|
+
}
|
|
45
74
|
export function traceContextFromCurrentTurnRecord(value) {
|
|
46
75
|
if (!isRecord(value))
|
|
47
76
|
return undefined;
|
|
@@ -100,7 +129,29 @@ function pruneRecord(value) {
|
|
|
100
129
|
return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));
|
|
101
130
|
}
|
|
102
131
|
export function isTraceClient(value) {
|
|
103
|
-
return value === "codex" || value === "claude";
|
|
132
|
+
return value === "codex" || value === "claude" || value === "dsh" || value === "opencode";
|
|
133
|
+
}
|
|
134
|
+
function traceContextFromDshBody(body, contextOrigin, capturedAt) {
|
|
135
|
+
if (!isRecord(body))
|
|
136
|
+
return undefined;
|
|
137
|
+
const sessionId = stringField(body, "session_id") ?? stringField(body, "sessionId");
|
|
138
|
+
const turn = body.turn;
|
|
139
|
+
if (!sessionId || typeof turn !== "number" || !Number.isSafeInteger(turn) || turn <= 0) {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
const cwd = stringField(body, "cwd");
|
|
143
|
+
if (!cwd)
|
|
144
|
+
return undefined;
|
|
145
|
+
return pruneTraceContext({
|
|
146
|
+
schemaVersion: "1",
|
|
147
|
+
client: "dsh",
|
|
148
|
+
sessionId,
|
|
149
|
+
turnId: String(turn),
|
|
150
|
+
cwd,
|
|
151
|
+
memoryProject: resolveMemoryProject(cwd),
|
|
152
|
+
contextOrigin,
|
|
153
|
+
capturedAt,
|
|
154
|
+
});
|
|
104
155
|
}
|
|
105
156
|
function stringField(record, key) {
|
|
106
157
|
const value = record[key];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { TRACE_CLEANUP_DEBOUNCE_MS, TRACE_CURRENT_TURN_TTL_MS, clientTraceConfigFromEnv, clientTracePaths, memoraxCodeHomeForTrace, } from "./
|
|
5
|
-
import { isTraceClient, traceContextFromCurrentTurnRecord, traceContextJson, } from "./
|
|
6
|
-
import { appendRepairingJsonl } from "
|
|
4
|
+
import { TRACE_CLEANUP_DEBOUNCE_MS, TRACE_CURRENT_TURN_TTL_MS, clientTraceConfigFromEnv, clientTracePaths, memoraxCodeHomeForTrace, } from "./config.js";
|
|
5
|
+
import { isTraceClient, traceContextFromCurrentTurnRecord, traceContextJson, } from "./context.js";
|
|
6
|
+
import { appendRepairingJsonl } from "../shared/jsonl-append.js";
|
|
7
7
|
const eventCounters = new Map();
|
|
8
8
|
const lastCleanupByRoot = new Map();
|
|
9
9
|
const currentTurnPathOperations = new Map();
|
package/lib/memorax-code-backend/dist/{server-memory-hook.js → transport/http/memory-hook.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { parseTurnStartCommand, parseWritebackCommand, } from "
|
|
2
|
-
import { readJson } from "./
|
|
3
|
-
import { json } from "./
|
|
1
|
+
import { parseTurnStartCommand, parseWritebackCommand, } from "../../memory/hook-command.js";
|
|
2
|
+
import { readJson } from "./request.js";
|
|
3
|
+
import { json } from "./json.js";
|
|
4
4
|
export async function handleMemoryHookRequest(dependencies, url, req, res) {
|
|
5
5
|
if (req.method !== "POST")
|
|
6
6
|
return false;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { backendEnv } from "
|
|
1
|
+
import { backendEnv } from "../../config/backend-env.js";
|
|
2
2
|
const DEFAULT_MAX_JSON_BODY_BYTES = 16 * 1024 * 1024;
|
|
3
3
|
const MEMORY_VIEWER_SESSION_COOKIE = "memorax_code_memory_viewer_session";
|
|
4
4
|
export class HttpRequestError extends Error {
|
|
@@ -2,9 +2,9 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { open, readdir, stat } from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { basename, join, resolve as resolvePath } from "node:path";
|
|
5
|
-
import { memoryViewerEventKey } from "
|
|
6
|
-
import { claudeTranscriptMemoryActivitiesFromJsonLines } from "
|
|
7
|
-
import { resolveMemoryProject, } from "
|
|
5
|
+
import { memoryViewerEventKey } from "../projection/event-identity.js";
|
|
6
|
+
import { claudeTranscriptMemoryActivitiesFromJsonLines } from "../../clients/claude/transcript-turn.js";
|
|
7
|
+
import { resolveMemoryProject, } from "../../memory/project.js";
|
|
8
8
|
const projections = new Map();
|
|
9
9
|
const EMPTY_TRANSCRIPT_HISTORY = Object.freeze([]);
|
|
10
10
|
const MAX_TRANSCRIPT_FILES = 250;
|
package/lib/memorax-code-backend/dist/{server-memory-viewer.js → viewer/http/public-routes.js}
RENAMED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
2
|
+
import { MEMORAX_ICON_DATA_URL } from "../ui/icon.js";
|
|
3
|
+
import { isMemoryProjectId, UNCLASSIFIED_PROJECT_ID } from "../../memory/project.js";
|
|
4
|
+
import { MEMORAX_LOGO_DATA_URL } from "../ui/logo.js";
|
|
5
|
+
import { memoryViewerUserHtml } from "../ui/user-html.js";
|
|
6
|
+
import { projectMemoryViewerUserData } from "../projection/user.js";
|
|
7
|
+
import { listMemoryViewerDataWithHistory } from "../store.js";
|
|
8
|
+
import { repoMemoryReadinessForProject, } from "../../repository/readiness.js";
|
|
9
|
+
import { json } from "../../transport/http/json.js";
|
|
10
|
+
import { memoraxCodeHomeForTrace } from "../../trace/config.js";
|
|
10
11
|
const MEMORY_VIEWER_SESSION_ACTIVITY_WINDOW_MS = 72 * 60 * 60 * 1_000;
|
|
11
12
|
const MEMORY_VIEWER_ACTIVITY_CUTOFF_GRANULARITY_MS = 60_000;
|
|
12
13
|
const MEMORY_VIEWER_LOGO = Buffer.from(MEMORAX_LOGO_DATA_URL.slice(MEMORAX_LOGO_DATA_URL.indexOf(",") + 1), "base64");
|
|
14
|
+
const MEMORY_VIEWER_ICON = Buffer.from(MEMORAX_ICON_DATA_URL.slice(MEMORAX_ICON_DATA_URL.indexOf(",") + 1), "base64");
|
|
13
15
|
export async function handleMemoryViewerRequest(url, req, res, options = {}) {
|
|
14
16
|
if (req.method === "GET" && url.pathname === "/memory-viewer") {
|
|
15
17
|
if (!memoryViewerUserClient(url)) {
|
|
16
|
-
json(res, 400, { ok: false, error: "client must be codex
|
|
18
|
+
json(res, 400, { ok: false, error: "client must be codex, claude-code, dsh, or opencode" });
|
|
17
19
|
return true;
|
|
18
20
|
}
|
|
19
21
|
res.writeHead(200, {
|
|
@@ -36,13 +38,22 @@ export async function handleMemoryViewerRequest(url, req, res, options = {}) {
|
|
|
36
38
|
res.end(MEMORY_VIEWER_LOGO);
|
|
37
39
|
return true;
|
|
38
40
|
}
|
|
41
|
+
if (req.method === "GET" && url.pathname === "/memory-viewer/favicon.png") {
|
|
42
|
+
res.writeHead(200, {
|
|
43
|
+
"content-type": "image/png",
|
|
44
|
+
"cache-control": "private, max-age=86400",
|
|
45
|
+
"x-content-type-options": "nosniff",
|
|
46
|
+
});
|
|
47
|
+
res.end(MEMORY_VIEWER_ICON);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
39
50
|
if (req.method !== "GET" || url.pathname !== "/memory-viewer/api/summary") {
|
|
40
51
|
return false;
|
|
41
52
|
}
|
|
42
53
|
const memoraxCodeHome = viewerMemoraxCodeHome(options);
|
|
43
54
|
const selectedClient = memoryViewerUserClient(url);
|
|
44
55
|
if (!selectedClient) {
|
|
45
|
-
json(res, 400, { ok: false, error: "client must be codex
|
|
56
|
+
json(res, 400, { ok: false, error: "client must be codex, claude-code, dsh, or opencode" });
|
|
46
57
|
return true;
|
|
47
58
|
}
|
|
48
59
|
const requestedProject = projectFilter(url);
|
|
@@ -66,7 +77,7 @@ export async function handleMemoryViewerRequest(url, req, res, options = {}) {
|
|
|
66
77
|
conditionalViewerJson(req, res, {
|
|
67
78
|
ok: true,
|
|
68
79
|
selectedClient: selectedClient.publicClient,
|
|
69
|
-
availableClients: ["codex", "claude-code"],
|
|
80
|
+
availableClients: ["codex", "claude-code", "dsh", "opencode"],
|
|
70
81
|
summary: projection.summary,
|
|
71
82
|
activities: projection.activities.slice(0, 100),
|
|
72
83
|
projects,
|
|
@@ -83,12 +94,12 @@ function memoryViewerUserClient(url) {
|
|
|
83
94
|
const value = url.searchParams.get("client");
|
|
84
95
|
const traceClient = value === null ? "codex" : traceClientFromPublicValue(value.trim().toLowerCase());
|
|
85
96
|
return traceClient
|
|
86
|
-
? { traceClient, publicClient: traceClient === "claude" ? "claude-code" :
|
|
97
|
+
? { traceClient, publicClient: traceClient === "claude" ? "claude-code" : traceClient }
|
|
87
98
|
: undefined;
|
|
88
99
|
}
|
|
89
100
|
function traceClientFromPublicValue(value) {
|
|
90
|
-
if (value === "codex")
|
|
91
|
-
return
|
|
101
|
+
if (value === "codex" || value === "dsh" || value === "opencode")
|
|
102
|
+
return value;
|
|
92
103
|
return value === "claude" || value === "claude-code" || value === "cc"
|
|
93
104
|
? "claude"
|
|
94
105
|
: undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/memorax-code-backend/dist/{memory-viewer-activity.js → viewer/projection/activity.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { UNCLASSIFIED_PROJECT_ID } from "
|
|
2
|
-
import { memoryViewerEventTurnIds } from "./
|
|
1
|
+
import { UNCLASSIFIED_PROJECT_ID } from "../../memory/project.js";
|
|
2
|
+
import { memoryViewerEventTurnIds } from "./turn-reference.js";
|
|
3
3
|
export function memoryViewerActivitySummary(allEvents) {
|
|
4
4
|
let recalledCount = 0;
|
|
5
5
|
let addCount = 0;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { memoryViewerEventKey } from "./
|
|
1
|
+
import { memoryViewerEventKey } from "./event-identity.js";
|
|
2
2
|
/**
|
|
3
3
|
* Marks a retained start without an end as interrupted only when a different
|
|
4
4
|
* Turn demonstrably started later in the same client session.
|
package/lib/memorax-code-backend/dist/{memory-viewer-user-projection.js → viewer/projection/user.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isTraceClient } from "
|
|
1
|
+
import { isTraceClient } from "../../trace/context.js";
|
|
2
2
|
/**
|
|
3
3
|
* Projects raw Viewer events into the deliberately small user-facing summary contract.
|
|
4
4
|
* Conversation, memory, session, turn, and diagnostic fields never cross this boundary.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { completeMemoryWritebackTask, memoryText, memoryWritebackTaskEventKey, memoryWritebackTaskOutcome, memoryWritebackTaskOutcomeForStatus, nonNegativeInteger, projectMemoryWritebackTasks, stringArray, } from "
|
|
1
|
+
import { completeMemoryWritebackTask, memoryText, memoryWritebackTaskEventKey, memoryWritebackTaskOutcome, memoryWritebackTaskOutcomeForStatus, nonNegativeInteger, projectMemoryWritebackTasks, stringArray, } from "../../memory/writeback-task-projection.js";
|
|
2
2
|
export { memoryText, nonNegativeInteger, stringArray, };
|
|
3
3
|
export function pendingMemoryViewerWritebacks(eventsToCheck) {
|
|
4
4
|
const tasks = new Map(projectMemoryWritebackTasks(eventsToCheck.flatMap(memoryViewerWritebackProjectionRecord)).map((task) => [memoryWritebackTaskEventKey(task), task]));
|