pi-obsidian-memory 0.0.1 → 0.1.1
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 +237 -7
- package/package.json +41 -11
- package/skills/obsidian-memory/SKILL.md +101 -0
- package/src/domain/capture/constants.ts +5 -0
- package/src/domain/capture/index.ts +6 -0
- package/src/domain/capture/input-problems.ts +9 -0
- package/src/domain/capture/schemas.ts +92 -0
- package/src/domain/capture/tally.ts +26 -0
- package/src/domain/capture/types.ts +49 -0
- package/src/domain/capture/validate.ts +75 -0
- package/src/domain/command-flags/constants.ts +141 -0
- package/src/domain/command-flags/index.ts +1 -0
- package/src/domain/config/change.ts +105 -0
- package/src/domain/config/constants.ts +25 -0
- package/src/domain/config/diagnostics.ts +35 -0
- package/src/domain/config/disclosures.ts +8 -0
- package/src/domain/config/fields.ts +7 -0
- package/src/domain/config/index.ts +11 -0
- package/src/domain/config/inspection.ts +43 -0
- package/src/domain/config/invariants.ts +68 -0
- package/src/domain/config/legacy-capture.ts +17 -0
- package/src/domain/config/observations.ts +109 -0
- package/src/domain/config/parse.ts +25 -0
- package/src/domain/config/paths.ts +61 -0
- package/src/domain/config/registration.ts +34 -0
- package/src/domain/config/repair.ts +36 -0
- package/src/domain/config/resources.ts +65 -0
- package/src/domain/config/rules.ts +49 -0
- package/src/domain/config/schemas.ts +155 -0
- package/src/domain/config/settings.ts +23 -0
- package/src/domain/config/types.ts +239 -0
- package/src/domain/decision-model/constants.ts +7 -0
- package/src/domain/decision-model/cutoffs.ts +8 -0
- package/src/domain/decision-model/endpoint.ts +11 -0
- package/src/domain/decision-model/failure-detail.ts +8 -0
- package/src/domain/decision-model/index.ts +6 -0
- package/src/domain/decision-model/rank.ts +36 -0
- package/src/domain/decision-model/types.ts +77 -0
- package/src/domain/embeddings/constants.ts +55 -0
- package/src/domain/embeddings/identity.ts +30 -0
- package/src/domain/embeddings/index.ts +5 -0
- package/src/domain/embeddings/schemas.ts +25 -0
- package/src/domain/embeddings/types.ts +52 -0
- package/src/domain/embeddings/vectors.ts +53 -0
- package/src/domain/folder-index/constants.ts +9 -0
- package/src/domain/folder-index/display.ts +22 -0
- package/src/domain/folder-index/index.ts +5 -0
- package/src/domain/folder-index/listing.ts +58 -0
- package/src/domain/folder-index/render.ts +114 -0
- package/src/domain/folder-index/types.ts +41 -0
- package/src/domain/index.ts +22 -0
- package/src/domain/lifecycle/index.ts +2 -0
- package/src/domain/lifecycle/lifecycle.ts +39 -0
- package/src/domain/lifecycle/types.ts +17 -0
- package/src/domain/loaded-memory/budget.ts +14 -0
- package/src/domain/loaded-memory/constants.ts +9 -0
- package/src/domain/loaded-memory/index.ts +4 -0
- package/src/domain/loaded-memory/render.ts +30 -0
- package/src/domain/loaded-memory/types.ts +19 -0
- package/src/domain/memory/draft.ts +12 -0
- package/src/domain/memory/index.ts +4 -0
- package/src/domain/memory/schemas.ts +15 -0
- package/src/domain/memory/target.ts +27 -0
- package/src/domain/memory/types.ts +20 -0
- package/src/domain/memory-agent/index.ts +5 -0
- package/src/domain/memory-agent/input-problems.ts +9 -0
- package/src/domain/memory-agent/refusal.ts +6 -0
- package/src/domain/memory-agent/schemas.ts +112 -0
- package/src/domain/memory-agent/types.ts +25 -0
- package/src/domain/memory-agent/validate.ts +67 -0
- package/src/domain/names/constants.ts +32 -0
- package/src/domain/names/index.ts +2 -0
- package/src/domain/names/names.ts +83 -0
- package/src/domain/note/check.ts +68 -0
- package/src/domain/note/constants.ts +15 -0
- package/src/domain/note/frontmatter-fields.ts +175 -0
- package/src/domain/note/frontmatter.ts +138 -0
- package/src/domain/note/index.ts +9 -0
- package/src/domain/note/parse.ts +41 -0
- package/src/domain/note/render.ts +27 -0
- package/src/domain/note/schema-errors.ts +41 -0
- package/src/domain/note/schemas.ts +38 -0
- package/src/domain/note/types.ts +53 -0
- package/src/domain/note/validate.ts +19 -0
- package/src/domain/path-platform/index.ts +2 -0
- package/src/domain/path-platform/path-module.ts +11 -0
- package/src/domain/path-platform/types.ts +1 -0
- package/src/domain/search-catalog/constants.ts +1 -0
- package/src/domain/search-catalog/coverage.ts +35 -0
- package/src/domain/search-catalog/dont-forget.ts +10 -0
- package/src/domain/search-catalog/fingerprint.ts +9 -0
- package/src/domain/search-catalog/index.ts +10 -0
- package/src/domain/search-catalog/inspection.ts +47 -0
- package/src/domain/search-catalog/plan.ts +68 -0
- package/src/domain/search-catalog/ranking.ts +27 -0
- package/src/domain/search-catalog/schemas.ts +49 -0
- package/src/domain/search-catalog/types.ts +103 -0
- package/src/domain/search-catalog/vector-refresh.ts +22 -0
- package/src/domain/shell-edit/command-segments.ts +28 -0
- package/src/domain/shell-edit/command-words.ts +22 -0
- package/src/domain/shell-edit/constants.ts +125 -0
- package/src/domain/shell-edit/executed-files.ts +154 -0
- package/src/domain/shell-edit/index.ts +6 -0
- package/src/domain/shell-edit/powershell-files.ts +38 -0
- package/src/domain/shell-edit/rules.ts +19 -0
- package/src/domain/shell-edit/types.ts +75 -0
- package/src/domain/tool-flags/constants.ts +178 -0
- package/src/domain/tool-flags/index.ts +2 -0
- package/src/domain/tool-flags/types.ts +7 -0
- package/src/domain/validation/constants.ts +1 -0
- package/src/domain/validation/describe.ts +137 -0
- package/src/domain/validation/index.ts +3 -0
- package/src/domain/validation/types.ts +3 -0
- package/src/domain/vault-access/absolute-candidate.ts +81 -0
- package/src/domain/vault-access/argument-tokens.ts +22 -0
- package/src/domain/vault-access/command-mentions-vault.ts +115 -0
- package/src/domain/vault-access/constants.ts +54 -0
- package/src/domain/vault-access/index.ts +7 -0
- package/src/domain/vault-access/types.ts +18 -0
- package/src/domain/vault-access/vault-access-refusal.ts +36 -0
- package/src/domain/vault-access/vault-location.ts +22 -0
- package/src/domain/vault-assets/index.ts +2 -0
- package/src/domain/vault-assets/render.ts +51 -0
- package/src/domain/vault-assets/types.ts +36 -0
- package/src/domain/vault-catalog/analyze.ts +37 -0
- package/src/domain/vault-catalog/classify.ts +37 -0
- package/src/domain/vault-catalog/dont-forget.ts +6 -0
- package/src/domain/vault-catalog/export-entries.ts +10 -0
- package/src/domain/vault-catalog/index.ts +5 -0
- package/src/domain/vault-catalog/types.ts +114 -0
- package/src/domain/vault-diagnosis/diagnose.ts +79 -0
- package/src/domain/vault-diagnosis/index.ts +2 -0
- package/src/domain/vault-diagnosis/types.ts +31 -0
- package/src/domain/vault-path/constants.ts +13 -0
- package/src/domain/vault-path/index.ts +2 -0
- package/src/domain/vault-path/vault-path.ts +65 -0
- package/src/pi/capture/cadence.ts +49 -0
- package/src/pi/capture/completion.ts +26 -0
- package/src/pi/capture/constants.ts +5 -0
- package/src/pi/capture/handlers.ts +30 -0
- package/src/pi/capture/index.ts +8 -0
- package/src/pi/capture/runtime.ts +83 -0
- package/src/pi/capture/schemas.ts +8 -0
- package/src/pi/capture/tool-calls.ts +6 -0
- package/src/pi/capture/transcript.ts +55 -0
- package/src/pi/capture/types.ts +46 -0
- package/src/pi/change-report/constants.ts +15 -0
- package/src/pi/change-report/index.ts +3 -0
- package/src/pi/change-report/report.ts +54 -0
- package/src/pi/change-report/types.ts +8 -0
- package/src/pi/context/constants.ts +5 -0
- package/src/pi/context/index.ts +3 -0
- package/src/pi/context/status.ts +15 -0
- package/src/pi/context/types.ts +98 -0
- package/src/pi/extension.ts +100 -0
- package/src/pi/index.ts +26 -0
- package/src/pi/memory-add/constants.ts +13 -0
- package/src/pi/memory-add/index.ts +5 -0
- package/src/pi/memory-add/memory-add.ts +31 -0
- package/src/pi/memory-add/respond.ts +55 -0
- package/src/pi/memory-add/schemas.ts +29 -0
- package/src/pi/memory-add/types.ts +15 -0
- package/src/pi/memory-archive/constants.ts +8 -0
- package/src/pi/memory-archive/index.ts +4 -0
- package/src/pi/memory-archive/memory-archive.ts +29 -0
- package/src/pi/memory-archive/schemas.ts +15 -0
- package/src/pi/memory-archive/types.ts +8 -0
- package/src/pi/memory-block/block.ts +75 -0
- package/src/pi/memory-block/constants.ts +24 -0
- package/src/pi/memory-block/index.ts +4 -0
- package/src/pi/memory-block/render.ts +54 -0
- package/src/pi/memory-block/types.ts +24 -0
- package/src/pi/memory-doctor/constants.ts +43 -0
- package/src/pi/memory-doctor/index.ts +4 -0
- package/src/pi/memory-doctor/memory-doctor.ts +135 -0
- package/src/pi/memory-doctor/report.ts +101 -0
- package/src/pi/memory-doctor/types.ts +13 -0
- package/src/pi/memory-export/constants.ts +15 -0
- package/src/pi/memory-export/index.ts +4 -0
- package/src/pi/memory-export/memory-export.ts +57 -0
- package/src/pi/memory-export/name.ts +9 -0
- package/src/pi/memory-export/types.ts +4 -0
- package/src/pi/memory-get/constants.ts +12 -0
- package/src/pi/memory-get/index.ts +5 -0
- package/src/pi/memory-get/memory-get.ts +23 -0
- package/src/pi/memory-get/respond.ts +38 -0
- package/src/pi/memory-get/schemas.ts +13 -0
- package/src/pi/memory-get/types.ts +10 -0
- package/src/pi/memory-init/constants.ts +17 -0
- package/src/pi/memory-init/index.ts +2 -0
- package/src/pi/memory-init/memory-init.ts +63 -0
- package/src/pi/memory-search/constants.ts +16 -0
- package/src/pi/memory-search/index.ts +5 -0
- package/src/pi/memory-search/memory-search.ts +22 -0
- package/src/pi/memory-search/respond.ts +62 -0
- package/src/pi/memory-search/schemas.ts +11 -0
- package/src/pi/memory-search/types.ts +10 -0
- package/src/pi/memory-session/constants.ts +7 -0
- package/src/pi/memory-session/index.ts +4 -0
- package/src/pi/memory-session/keeper.ts +101 -0
- package/src/pi/memory-session/respond.ts +6 -0
- package/src/pi/memory-session/types.ts +23 -0
- package/src/pi/memory-settings/constants.ts +69 -0
- package/src/pi/memory-settings/edits.ts +46 -0
- package/src/pi/memory-settings/index.ts +9 -0
- package/src/pi/memory-settings/lines.ts +119 -0
- package/src/pi/memory-settings/models.ts +81 -0
- package/src/pi/memory-settings/projects.ts +46 -0
- package/src/pi/memory-settings/providers.ts +77 -0
- package/src/pi/memory-settings/save.ts +16 -0
- package/src/pi/memory-settings/screen.ts +27 -0
- package/src/pi/memory-settings/types.ts +87 -0
- package/src/pi/memory-setup/constants.ts +33 -0
- package/src/pi/memory-setup/disclosure.ts +22 -0
- package/src/pi/memory-setup/index.ts +4 -0
- package/src/pi/memory-setup/memory-setup.ts +153 -0
- package/src/pi/memory-setup/types.ts +6 -0
- package/src/pi/memory-succeed/constants.ts +10 -0
- package/src/pi/memory-succeed/index.ts +4 -0
- package/src/pi/memory-succeed/memory-succeed.ts +34 -0
- package/src/pi/memory-succeed/schemas.ts +30 -0
- package/src/pi/memory-succeed/types.ts +8 -0
- package/src/pi/memory-update/constants.ts +8 -0
- package/src/pi/memory-update/index.ts +4 -0
- package/src/pi/memory-update/memory-update.ts +29 -0
- package/src/pi/memory-update/schemas.ts +24 -0
- package/src/pi/memory-update/types.ts +8 -0
- package/src/pi/paths/constants.ts +7 -0
- package/src/pi/paths/index.ts +2 -0
- package/src/pi/paths/paths.ts +15 -0
- package/src/pi/paths/platform.ts +7 -0
- package/src/pi/registrar.ts +25 -0
- package/src/pi/registration-report/constants.ts +13 -0
- package/src/pi/registration-report/index.ts +2 -0
- package/src/pi/registration-report/report.ts +26 -0
- package/src/pi/relevant-memory/constants.ts +3 -0
- package/src/pi/relevant-memory/index.ts +4 -0
- package/src/pi/relevant-memory/prompt.ts +23 -0
- package/src/pi/relevant-memory/runtime.ts +88 -0
- package/src/pi/relevant-memory/types.ts +14 -0
- package/src/pi/semantic/constants.ts +3 -0
- package/src/pi/semantic/index.ts +2 -0
- package/src/pi/semantic/runtime.ts +59 -0
- package/src/pi/session-start/constants.ts +7 -0
- package/src/pi/session-start/index.ts +3 -0
- package/src/pi/session-start/session-start.ts +48 -0
- package/src/pi/session-start/types.ts +5 -0
- package/src/pi/shell-edit-guard/guard.ts +41 -0
- package/src/pi/shell-edit-guard/index.ts +3 -0
- package/src/pi/shell-edit-guard/prompt.ts +30 -0
- package/src/pi/shell-edit-guard/types.ts +13 -0
- package/src/pi/types.ts +44 -0
- package/src/pi/vault-guard/constants.ts +1 -0
- package/src/pi/vault-guard/index.ts +4 -0
- package/src/pi/vault-guard/request.ts +39 -0
- package/src/pi/vault-guard/types.ts +5 -0
- package/src/pi/vault-guard/vault-guard.ts +21 -0
- package/src/services/capture-cadence/domain-rules.ts +8 -0
- package/src/services/capture-cadence/index.ts +1 -0
- package/src/services/clock/clock.ts +7 -0
- package/src/services/clock/index.ts +1 -0
- package/src/services/config/canonicalize.ts +163 -0
- package/src/services/config/constants.ts +1 -0
- package/src/services/config/fully-qualified-path.ts +14 -0
- package/src/services/config/index.ts +12 -0
- package/src/services/config/path-identity.ts +65 -0
- package/src/services/config/publication.ts +75 -0
- package/src/services/config/read.ts +47 -0
- package/src/services/config/registration.ts +26 -0
- package/src/services/config/resolve-input.ts +27 -0
- package/src/services/config/snapshot.ts +26 -0
- package/src/services/config/target.ts +2 -0
- package/src/services/config/types.ts +97 -0
- package/src/services/config/vault-access.ts +2 -0
- package/src/services/config/volume-namespace.ts +5 -0
- package/src/services/config/write.ts +63 -0
- package/src/services/decision-model/constants.ts +16 -0
- package/src/services/decision-model/decide.ts +42 -0
- package/src/services/decision-model/diagnostics.ts +6 -0
- package/src/services/decision-model/endpoint.ts +1 -0
- package/src/services/decision-model/failure-detail.ts +1 -0
- package/src/services/decision-model/index.ts +7 -0
- package/src/services/decision-model/interruption.ts +29 -0
- package/src/services/decision-model/jev.ts +61 -0
- package/src/services/decision-model/laya-batch.ts +64 -0
- package/src/services/decision-model/laya-http-failure.ts +41 -0
- package/src/services/decision-model/laya-response.ts +95 -0
- package/src/services/decision-model/laya.ts +35 -0
- package/src/services/decision-model/preflight.ts +24 -0
- package/src/services/decision-model/prompts.ts +36 -0
- package/src/services/decision-model/schemas.ts +43 -0
- package/src/services/decision-model/score-candidates.ts +41 -0
- package/src/services/decision-model/types.ts +182 -0
- package/src/services/embeddings/asset-download.ts +45 -0
- package/src/services/embeddings/asset-fetch.ts +39 -0
- package/src/services/embeddings/asset-inspection.ts +36 -0
- package/src/services/embeddings/batch.ts +32 -0
- package/src/services/embeddings/chunks.ts +80 -0
- package/src/services/embeddings/configuration.ts +8 -0
- package/src/services/embeddings/constants.ts +24 -0
- package/src/services/embeddings/errors.ts +11 -0
- package/src/services/embeddings/google.ts +90 -0
- package/src/services/embeddings/http.ts +64 -0
- package/src/services/embeddings/index.ts +17 -0
- package/src/services/embeddings/inference.ts +35 -0
- package/src/services/embeddings/local.ts +138 -0
- package/src/services/embeddings/model-asset.ts +68 -0
- package/src/services/embeddings/model-cache.ts +30 -0
- package/src/services/embeddings/openai.ts +64 -0
- package/src/services/embeddings/operation.ts +31 -0
- package/src/services/embeddings/responses.ts +41 -0
- package/src/services/embeddings/runtime.ts +13 -0
- package/src/services/embeddings/schemas.ts +53 -0
- package/src/services/embeddings/types.ts +116 -0
- package/src/services/id/id.ts +5 -0
- package/src/services/id/index.ts +1 -0
- package/src/services/index.ts +11 -0
- package/src/services/llm/capture.ts +19 -0
- package/src/services/llm/check-chat-models.ts +38 -0
- package/src/services/llm/complete.ts +57 -0
- package/src/services/llm/constants.ts +32 -0
- package/src/services/llm/domain-rules.ts +2 -0
- package/src/services/llm/index.ts +6 -0
- package/src/services/llm/lifetime.ts +16 -0
- package/src/services/llm/retrieve.ts +19 -0
- package/src/services/llm/schemas.ts +9 -0
- package/src/services/llm/types.ts +94 -0
- package/src/services/search-index/catalog-query.ts +34 -0
- package/src/services/search-index/catalog-statements.ts +33 -0
- package/src/services/search-index/catalog.ts +19 -0
- package/src/services/search-index/cleanup.ts +13 -0
- package/src/services/search-index/close.ts +5 -0
- package/src/services/search-index/constants.ts +102 -0
- package/src/services/search-index/dont-forget.ts +1 -0
- package/src/services/search-index/fingerprint.ts +17 -0
- package/src/services/search-index/folder-index-statements.ts +17 -0
- package/src/services/search-index/folder-index-storage.ts +54 -0
- package/src/services/search-index/folder-indexes.ts +13 -0
- package/src/services/search-index/index.ts +14 -0
- package/src/services/search-index/inspection.ts +1 -0
- package/src/services/search-index/inventory.ts +67 -0
- package/src/services/search-index/legacy.ts +64 -0
- package/src/services/search-index/location.ts +12 -0
- package/src/services/search-index/open.ts +46 -0
- package/src/services/search-index/query.ts +39 -0
- package/src/services/search-index/ranking.ts +12 -0
- package/src/services/search-index/reconcile.ts +93 -0
- package/src/services/search-index/recovery.ts +56 -0
- package/src/services/search-index/refusals.ts +21 -0
- package/src/services/search-index/schema.ts +42 -0
- package/src/services/search-index/schemas.ts +181 -0
- package/src/services/search-index/search.ts +5 -0
- package/src/services/search-index/statements.ts +18 -0
- package/src/services/search-index/storage.ts +207 -0
- package/src/services/search-index/types.ts +113 -0
- package/src/services/search-index/vector-statements.ts +18 -0
- package/src/services/search-index/vector-storage.ts +169 -0
- package/src/services/search-index/vectors.ts +18 -0
- package/src/services/search-index/write.ts +9 -0
- package/src/services/shell-edit/ask.ts +53 -0
- package/src/services/shell-edit/domain-rules.ts +2 -0
- package/src/services/shell-edit/index.ts +4 -0
- package/src/services/shell-edit/schemas.ts +23 -0
- package/src/services/shell-edit/types.ts +61 -0
- package/src/services/shell-scripts/constants.ts +1 -0
- package/src/services/shell-scripts/files.ts +16 -0
- package/src/services/shell-scripts/index.ts +5 -0
- package/src/services/shell-scripts/package-scripts.ts +74 -0
- package/src/services/shell-scripts/schemas.ts +3 -0
- package/src/services/shell-scripts/scripts.ts +27 -0
- package/src/services/shell-scripts/types.ts +11 -0
- package/src/services/vault/archive.ts +31 -0
- package/src/services/vault/bootstrap/ensure.ts +50 -0
- package/src/services/vault/bootstrap/index.ts +2 -0
- package/src/services/vault/bootstrap/paths.ts +57 -0
- package/src/services/vault/bootstrap/types.ts +17 -0
- package/src/services/vault/bootstrap/write.ts +47 -0
- package/src/services/vault/catalog/bytes.ts +51 -0
- package/src/services/vault/catalog/dont-forget.ts +1 -0
- package/src/services/vault/catalog/enumerate.ts +69 -0
- package/src/services/vault/catalog/export.ts +21 -0
- package/src/services/vault/catalog/failures.ts +16 -0
- package/src/services/vault/catalog/index.ts +10 -0
- package/src/services/vault/catalog/inspect.ts +41 -0
- package/src/services/vault/catalog/observe.ts +35 -0
- package/src/services/vault/catalog/resolve.ts +94 -0
- package/src/services/vault/catalog/stat.ts +23 -0
- package/src/services/vault/catalog/types.ts +69 -0
- package/src/services/vault/catalog/visit.ts +58 -0
- package/src/services/vault/complete-blank.ts +66 -0
- package/src/services/vault/constants.ts +3 -0
- package/src/services/vault/context/index.ts +1 -0
- package/src/services/vault/context/types.ts +10 -0
- package/src/services/vault/create.ts +19 -0
- package/src/services/vault/display.ts +6 -0
- package/src/services/vault/domain-rules.ts +10 -0
- package/src/services/vault/draft.ts +2 -0
- package/src/services/vault/filesystem/failures.ts +53 -0
- package/src/services/vault/filesystem/hash.ts +5 -0
- package/src/services/vault/filesystem/index.ts +5 -0
- package/src/services/vault/filesystem/read.ts +61 -0
- package/src/services/vault/filesystem/types.ts +36 -0
- package/src/services/vault/filesystem/write.ts +80 -0
- package/src/services/vault/find.ts +27 -0
- package/src/services/vault/folder-contents.ts +31 -0
- package/src/services/vault/folder-index/index.ts +2 -0
- package/src/services/vault/folder-index/read.ts +87 -0
- package/src/services/vault/folder-index/types.ts +19 -0
- package/src/services/vault/folder-listing.ts +1 -0
- package/src/services/vault/index.ts +21 -0
- package/src/services/vault/inspect-folder.ts +13 -0
- package/src/services/vault/list.ts +121 -0
- package/src/services/vault/memory-folder.ts +24 -0
- package/src/services/vault/paths.ts +11 -0
- package/src/services/vault/publish.ts +52 -0
- package/src/services/vault/read.ts +46 -0
- package/src/services/vault/refresh-folders.ts +197 -0
- package/src/services/vault/refresh-plan.ts +79 -0
- package/src/services/vault/refresh.ts +8 -0
- package/src/services/vault/refusals.ts +23 -0
- package/src/services/vault/relocate.ts +131 -0
- package/src/services/vault/relocation-checks.ts +89 -0
- package/src/services/vault/resolve-stored-file.ts +43 -0
- package/src/services/vault/resolve.ts +109 -0
- package/src/services/vault/succeed.ts +45 -0
- package/src/services/vault/types.ts +199 -0
- package/src/services/vault/update-file.ts +58 -0
- package/src/services/vault/update.ts +22 -0
- package/src/services/vault/write-new-file.ts +37 -0
- package/src/shared/index.ts +1 -0
- package/src/shared/result/index.ts +1 -0
- package/src/shared/result/types.ts +17 -0
- package/src/usecases/add-memory/add-memory.ts +83 -0
- package/src/usecases/add-memory/index.ts +4 -0
- package/src/usecases/add-memory/maintenance.ts +23 -0
- package/src/usecases/add-memory/schemas.ts +12 -0
- package/src/usecases/add-memory/types.ts +47 -0
- package/src/usecases/archive-memory/archive-memory.ts +27 -0
- package/src/usecases/archive-memory/index.ts +3 -0
- package/src/usecases/archive-memory/schemas.ts +11 -0
- package/src/usecases/archive-memory/types.ts +17 -0
- package/src/usecases/capture-memory/apply.ts +73 -0
- package/src/usecases/capture-memory/capture-memory.ts +117 -0
- package/src/usecases/capture-memory/constants.ts +15 -0
- package/src/usecases/capture-memory/index.ts +5 -0
- package/src/usecases/capture-memory/observe.ts +122 -0
- package/src/usecases/capture-memory/settings.ts +20 -0
- package/src/usecases/capture-memory/types.ts +103 -0
- package/src/usecases/check-shell-edit/check-shell-edit.ts +28 -0
- package/src/usecases/check-shell-edit/index.ts +2 -0
- package/src/usecases/check-shell-edit/types.ts +30 -0
- package/src/usecases/check-vault-access/check-vault-access.ts +23 -0
- package/src/usecases/check-vault-access/constants.ts +7 -0
- package/src/usecases/check-vault-access/index.ts +4 -0
- package/src/usecases/check-vault-access/raw-device.ts +10 -0
- package/src/usecases/check-vault-access/targets.ts +49 -0
- package/src/usecases/check-vault-access/types.ts +33 -0
- package/src/usecases/complete-blank-memory/complete-blank-memory.ts +48 -0
- package/src/usecases/complete-blank-memory/constants.ts +3 -0
- package/src/usecases/complete-blank-memory/index.ts +4 -0
- package/src/usecases/complete-blank-memory/schemas.ts +14 -0
- package/src/usecases/complete-blank-memory/types.ts +28 -0
- package/src/usecases/diagnose-memory/constants.ts +3 -0
- package/src/usecases/diagnose-memory/decision.ts +36 -0
- package/src/usecases/diagnose-memory/diagnose-memory.ts +52 -0
- package/src/usecases/diagnose-memory/embeddings.ts +39 -0
- package/src/usecases/diagnose-memory/index.ts +5 -0
- package/src/usecases/diagnose-memory/types.ts +86 -0
- package/src/usecases/diagnose-memory/vault.ts +33 -0
- package/src/usecases/export-memory/collect.ts +20 -0
- package/src/usecases/export-memory/constants.ts +3 -0
- package/src/usecases/export-memory/export-memory.ts +84 -0
- package/src/usecases/export-memory/index.ts +3 -0
- package/src/usecases/export-memory/types.ts +28 -0
- package/src/usecases/get-memory/get-memory.ts +97 -0
- package/src/usecases/get-memory/index.ts +2 -0
- package/src/usecases/get-memory/types.ts +25 -0
- package/src/usecases/index.ts +25 -0
- package/src/usecases/list-memory/index.ts +2 -0
- package/src/usecases/list-memory/leased/index.ts +2 -0
- package/src/usecases/list-memory/leased/read.ts +16 -0
- package/src/usecases/list-memory/leased/types.ts +21 -0
- package/src/usecases/list-memory/list-memory.ts +33 -0
- package/src/usecases/list-memory/types.ts +8 -0
- package/src/usecases/load-dont-forget/index.ts +2 -0
- package/src/usecases/load-dont-forget/load-dont-forget.ts +111 -0
- package/src/usecases/load-dont-forget/types.ts +26 -0
- package/src/usecases/memory-change/change.ts +42 -0
- package/src/usecases/memory-change/index.ts +5 -0
- package/src/usecases/memory-change/maintenance.ts +11 -0
- package/src/usecases/memory-change/partial.ts +18 -0
- package/src/usecases/memory-change/receipt.ts +40 -0
- package/src/usecases/memory-change/types.ts +44 -0
- package/src/usecases/operation-context/context.ts +37 -0
- package/src/usecases/operation-context/index.ts +2 -0
- package/src/usecases/operation-context/types.ts +19 -0
- package/src/usecases/registration/check.ts +6 -0
- package/src/usecases/registration/entry.ts +33 -0
- package/src/usecases/registration/index.ts +8 -0
- package/src/usecases/registration/init.ts +94 -0
- package/src/usecases/registration/prepare-init.ts +43 -0
- package/src/usecases/registration/prepare.ts +35 -0
- package/src/usecases/registration/propose.ts +34 -0
- package/src/usecases/registration/publication.ts +90 -0
- package/src/usecases/registration/setup.ts +41 -0
- package/src/usecases/registration/types.ts +107 -0
- package/src/usecases/relevant-memory/agent.ts +55 -0
- package/src/usecases/relevant-memory/constants.ts +28 -0
- package/src/usecases/relevant-memory/cutoffs.ts +29 -0
- package/src/usecases/relevant-memory/decision.ts +102 -0
- package/src/usecases/relevant-memory/index.ts +11 -0
- package/src/usecases/relevant-memory/loaded.ts +31 -0
- package/src/usecases/relevant-memory/refresh.ts +30 -0
- package/src/usecases/relevant-memory/retrieve-memory.ts +62 -0
- package/src/usecases/relevant-memory/schemas.ts +20 -0
- package/src/usecases/relevant-memory/session-memory.ts +53 -0
- package/src/usecases/relevant-memory/track-dont-forget.ts +13 -0
- package/src/usecases/relevant-memory/types.ts +106 -0
- package/src/usecases/resolve-memory/index.ts +2 -0
- package/src/usecases/resolve-memory/leased/index.ts +2 -0
- package/src/usecases/resolve-memory/leased/resolve.ts +109 -0
- package/src/usecases/resolve-memory/leased/types.ts +35 -0
- package/src/usecases/resolve-memory/resolve-memory.ts +23 -0
- package/src/usecases/resolve-memory/types.ts +7 -0
- package/src/usecases/search-memory/constants.ts +1 -0
- package/src/usecases/search-memory/index.ts +3 -0
- package/src/usecases/search-memory/search-memory.ts +132 -0
- package/src/usecases/search-memory/types.ts +39 -0
- package/src/usecases/semantic/constants.ts +7 -0
- package/src/usecases/semantic/index.ts +5 -0
- package/src/usecases/semantic/prepare.ts +30 -0
- package/src/usecases/semantic/rank.ts +83 -0
- package/src/usecases/semantic/refresh-vectors.ts +95 -0
- package/src/usecases/semantic/types.ts +17 -0
- package/src/usecases/semantic-port/index.ts +1 -0
- package/src/usecases/semantic-port/types.ts +20 -0
- package/src/usecases/semantic-provider/constants.ts +6 -0
- package/src/usecases/semantic-provider/index.ts +5 -0
- package/src/usecases/semantic-provider/local.ts +33 -0
- package/src/usecases/semantic-provider/remote.ts +10 -0
- package/src/usecases/semantic-provider/size.ts +10 -0
- package/src/usecases/semantic-provider/types.ts +19 -0
- package/src/usecases/session/index.ts +2 -0
- package/src/usecases/session/lease.ts +70 -0
- package/src/usecases/session/receipts.ts +46 -0
- package/src/usecases/session/state.ts +106 -0
- package/src/usecases/session/types.ts +45 -0
- package/src/usecases/settings/change.ts +142 -0
- package/src/usecases/settings/index.ts +3 -0
- package/src/usecases/settings/prepare.ts +24 -0
- package/src/usecases/settings/types.ts +32 -0
- package/src/usecases/succeed-memory/index.ts +3 -0
- package/src/usecases/succeed-memory/schemas.ts +13 -0
- package/src/usecases/succeed-memory/succeed-memory.ts +34 -0
- package/src/usecases/succeed-memory/types.ts +18 -0
- package/src/usecases/synchronize-memory/index.ts +2 -0
- package/src/usecases/synchronize-memory/leased/aliases.ts +55 -0
- package/src/usecases/synchronize-memory/leased/folder-states.ts +58 -0
- package/src/usecases/synchronize-memory/leased/index.ts +2 -0
- package/src/usecases/synchronize-memory/leased/inspection.ts +32 -0
- package/src/usecases/synchronize-memory/leased/maintenance.ts +41 -0
- package/src/usecases/synchronize-memory/leased/publication.ts +55 -0
- package/src/usecases/synchronize-memory/leased/scan.ts +37 -0
- package/src/usecases/synchronize-memory/leased/synchronize.ts +102 -0
- package/src/usecases/synchronize-memory/leased/types.ts +60 -0
- package/src/usecases/synchronize-memory/synchronize-memory.ts +26 -0
- package/src/usecases/synchronize-memory/types.ts +5 -0
- package/src/usecases/update-memory/index.ts +3 -0
- package/src/usecases/update-memory/schemas.ts +14 -0
- package/src/usecases/update-memory/types.ts +16 -0
- package/src/usecases/update-memory/update-memory.ts +31 -0
- package/CHANGELOG.md +0 -21
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ProjectEntry } from "#src/usecases"
|
|
2
|
+
import {
|
|
3
|
+
NO_PROJECTS_NOTICE,
|
|
4
|
+
PROJECT_ACTION_TITLE,
|
|
5
|
+
PROJECT_CHANGE_VAULT,
|
|
6
|
+
PROJECT_REMOVE,
|
|
7
|
+
PROJECT_TITLE,
|
|
8
|
+
PROJECT_VAULT_TITLE,
|
|
9
|
+
} from "./constants.ts"
|
|
10
|
+
import { saveChange } from "./save.ts"
|
|
11
|
+
import type { SettingsEnv } from "./types.ts"
|
|
12
|
+
|
|
13
|
+
export function projectLabel(project: ProjectEntry): string {
|
|
14
|
+
return `${project.name} — ${project.folder} → ${project.vault}`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async function repoint(env: SettingsEnv, project: ProjectEntry): Promise<void> {
|
|
18
|
+
const answer = await env.ctx.ui.input(PROJECT_VAULT_TITLE, project.vault)
|
|
19
|
+
if (typeof answer !== "string" || answer.trim() === "") return
|
|
20
|
+
await saveChange(env, {
|
|
21
|
+
change: { kind: "projectVault", name: project.name, vault: answer.trim() },
|
|
22
|
+
what: `project ${project.name} now uses ${answer.trim()}`,
|
|
23
|
+
reload: true,
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async function remove(env: SettingsEnv, project: ProjectEntry): Promise<void> {
|
|
28
|
+
await saveChange(env, {
|
|
29
|
+
change: { kind: "removeProject", name: project.name },
|
|
30
|
+
what: `project ${project.name} was removed from the memory`,
|
|
31
|
+
reload: true,
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export async function projectsEdit(env: SettingsEnv): Promise<void> {
|
|
36
|
+
const { projects } = env.state.config
|
|
37
|
+
if (projects.length === 0) return env.ctx.ui.notify(NO_PROJECTS_NOTICE, "info")
|
|
38
|
+
const labels = projects.map(projectLabel)
|
|
39
|
+
const answer = await env.ctx.ui.select(PROJECT_TITLE, labels)
|
|
40
|
+
const project = projects.find((_entry, index) => labels[index] === answer)
|
|
41
|
+
if (!project) return
|
|
42
|
+
const actions = [PROJECT_CHANGE_VAULT, PROJECT_REMOVE]
|
|
43
|
+
const action = await env.ctx.ui.select(PROJECT_ACTION_TITLE, actions)
|
|
44
|
+
if (action === PROJECT_CHANGE_VAULT) return repoint(env, project)
|
|
45
|
+
if (action === PROJECT_REMOVE) return remove(env, project)
|
|
46
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CURRENT_MARK,
|
|
3
|
+
DECISION_TITLE,
|
|
4
|
+
EMBEDDING_CHOICES,
|
|
5
|
+
EMBEDDINGS_TITLE,
|
|
6
|
+
JEV_DISCLOSURE,
|
|
7
|
+
JEV_OPTION,
|
|
8
|
+
LAYA_DEFAULT_ENDPOINT,
|
|
9
|
+
LAYA_ENDPOINT_TITLE,
|
|
10
|
+
LAYA_OPTION,
|
|
11
|
+
REMOTE_EMBEDDINGS_DISCLOSURE,
|
|
12
|
+
} from "./constants.ts"
|
|
13
|
+
import { saveChange } from "./save.ts"
|
|
14
|
+
import type { SettingsEnv } from "./types.ts"
|
|
15
|
+
|
|
16
|
+
async function askEndpoint(env: SettingsEnv): Promise<string | null> {
|
|
17
|
+
let placeholder = LAYA_DEFAULT_ENDPOINT
|
|
18
|
+
const { decisionModel } = env.state.config
|
|
19
|
+
if (decisionModel.provider === "laya") placeholder = decisionModel.endpoint
|
|
20
|
+
const answer = await env.ctx.ui.input(LAYA_ENDPOINT_TITLE, placeholder)
|
|
21
|
+
if (typeof answer !== "string") return null
|
|
22
|
+
const typed = answer.trim()
|
|
23
|
+
if (typed !== "") return typed
|
|
24
|
+
if (decisionModel.provider === "laya") return decisionModel.endpoint
|
|
25
|
+
return null
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function useLaya(env: SettingsEnv): Promise<void> {
|
|
29
|
+
const endpoint = await askEndpoint(env)
|
|
30
|
+
if (typeof endpoint !== "string") return
|
|
31
|
+
await saveChange(env, {
|
|
32
|
+
change: { kind: "decision", provider: "laya", endpoint },
|
|
33
|
+
what: "decision model is now Laya (local). It ships no cutoffs: set the gate and relevance cutoffs here, or per-message memory stays off",
|
|
34
|
+
reload: false,
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function useJev(env: SettingsEnv): Promise<void> {
|
|
39
|
+
env.ctx.ui.notify(JEV_DISCLOSURE, "warning")
|
|
40
|
+
await saveChange(env, {
|
|
41
|
+
change: { kind: "decision", provider: "typesafe" },
|
|
42
|
+
what: "decision model is now Jev. The cutoffs start from TypeSafe's values (0.5 and 0.5)",
|
|
43
|
+
reload: false,
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export async function decisionEdit(env: SettingsEnv): Promise<void> {
|
|
48
|
+
const jevCurrent = env.state.config.decisionModel.provider === "typesafe"
|
|
49
|
+
let options = [`${JEV_OPTION} ${CURRENT_MARK}`, LAYA_OPTION]
|
|
50
|
+
if (!jevCurrent) options = [`${LAYA_OPTION} ${CURRENT_MARK}`, JEV_OPTION]
|
|
51
|
+
const answer = await env.ctx.ui.select(DECISION_TITLE, options)
|
|
52
|
+
if (typeof answer !== "string" || !options.includes(answer)) return
|
|
53
|
+
if (answer.startsWith(JEV_OPTION)) {
|
|
54
|
+
if (!jevCurrent) await useJev(env)
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
await useLaya(env)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function embeddingsEdit(env: SettingsEnv): Promise<void> {
|
|
61
|
+
const current = env.state.config.embeddings
|
|
62
|
+
const same = (provider: string) => provider === current.provider
|
|
63
|
+
const labels = EMBEDDING_CHOICES.filter((choice) => same(choice.value.provider)).map(
|
|
64
|
+
(choice) => `${choice.label} ${CURRENT_MARK}`,
|
|
65
|
+
)
|
|
66
|
+
const others = EMBEDDING_CHOICES.filter((choice) => !same(choice.value.provider))
|
|
67
|
+
const options = [...labels, ...others.map((choice) => choice.label)]
|
|
68
|
+
const answer = await env.ctx.ui.select(EMBEDDINGS_TITLE, options)
|
|
69
|
+
const picked = others.find((choice) => choice.label === answer)
|
|
70
|
+
if (!picked) return
|
|
71
|
+
if (picked.value.provider !== "local") env.ctx.ui.notify(REMOTE_EMBEDDINGS_DISCLOSURE, "warning")
|
|
72
|
+
await saveChange(env, {
|
|
73
|
+
change: { kind: "embeddings", embeddings: picked.value },
|
|
74
|
+
what: `embeddings are now ${picked.label}`,
|
|
75
|
+
reload: false,
|
|
76
|
+
})
|
|
77
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { changeMemorySettings } from "#src/usecases"
|
|
2
|
+
import { RELOAD_NOTE, SAVED } from "./constants.ts"
|
|
3
|
+
import type { Saving, SettingsEnv } from "./types.ts"
|
|
4
|
+
|
|
5
|
+
export async function saveChange(env: SettingsEnv, saving: Saving): Promise<boolean> {
|
|
6
|
+
const result = await changeMemorySettings({ change: saving.change, expectedHash: env.state.hash }, env.context)
|
|
7
|
+
if (!result.succeeded) {
|
|
8
|
+
if (result.reason !== "cancelled") env.ctx.ui.notify(result.problems.join("\n"), "error")
|
|
9
|
+
return false
|
|
10
|
+
}
|
|
11
|
+
const lines = [`${SAVED} ${saving.what}.`]
|
|
12
|
+
if (saving.reload) lines.push(RELOAD_NOTE)
|
|
13
|
+
lines.push(...result.output.warnings.map((warning) => `- ${warning}`))
|
|
14
|
+
env.ctx.ui.notify(lines.join("\n"), "info")
|
|
15
|
+
return true
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MemoryPiContext } from "#src/pi/context"
|
|
2
|
+
import { prepareMemorySettings, type RegistrationContext } from "#src/usecases"
|
|
3
|
+
import { DONE_LABEL, SETTINGS_TITLE } from "./constants.ts"
|
|
4
|
+
import { settingLines } from "./lines.ts"
|
|
5
|
+
import type { SettingsDeps } from "./types.ts"
|
|
6
|
+
|
|
7
|
+
function freshContext(base: RegistrationContext): RegistrationContext {
|
|
8
|
+
const stamp = base.session.stamp()
|
|
9
|
+
return { ...base, stamp, signal: base.session.signal(stamp) }
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export async function runSettingsScreen(ctx: MemoryPiContext, deps: SettingsDeps): Promise<void> {
|
|
13
|
+
while (true) {
|
|
14
|
+
const context = freshContext(deps.registration)
|
|
15
|
+
const prepared = await prepareMemorySettings(context)
|
|
16
|
+
if (!prepared.succeeded) {
|
|
17
|
+
if (!context.signal.aborted) ctx.ui.notify(prepared.problems.join("\n"), "error")
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
const lines = settingLines(prepared.output.config)
|
|
21
|
+
const labels = [...lines.map((line) => line.label), DONE_LABEL]
|
|
22
|
+
const answer = await ctx.ui.select(SETTINGS_TITLE, labels)
|
|
23
|
+
const line = lines.find((_entry, index) => labels[index] === answer)
|
|
24
|
+
if (!line) return
|
|
25
|
+
await line.edit({ ctx, deps, context, state: prepared.output })
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { MemoryPiContext } from "#src/pi/context"
|
|
2
|
+
import type {
|
|
3
|
+
ChatModelReference,
|
|
4
|
+
MemoryConfig,
|
|
5
|
+
RegistrationContext,
|
|
6
|
+
SettingChange,
|
|
7
|
+
SettingsPreparation,
|
|
8
|
+
} from "#src/usecases"
|
|
9
|
+
|
|
10
|
+
export interface CurrentModel {
|
|
11
|
+
provider?: string
|
|
12
|
+
id?: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ModelChoice {
|
|
16
|
+
label: string
|
|
17
|
+
reference: ChatModelReference
|
|
18
|
+
current: boolean
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type VaultChanger = (context: RegistrationContext) => Promise<void>
|
|
22
|
+
|
|
23
|
+
export interface SettingsDeps {
|
|
24
|
+
registration: RegistrationContext
|
|
25
|
+
changeGlobalVault: VaultChanger
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface SettingsEnv {
|
|
29
|
+
ctx: MemoryPiContext
|
|
30
|
+
deps: SettingsDeps
|
|
31
|
+
context: RegistrationContext
|
|
32
|
+
state: SettingsPreparation
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export type LineEdit = (env: SettingsEnv) => Promise<void>
|
|
36
|
+
|
|
37
|
+
export interface SettingLine {
|
|
38
|
+
label: string
|
|
39
|
+
edit: LineEdit
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface Saving {
|
|
43
|
+
change: SettingChange
|
|
44
|
+
what: string
|
|
45
|
+
reload: boolean
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface SwitchDiscriminant {
|
|
49
|
+
kind: "captureSwitch"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface CountDiscriminant {
|
|
53
|
+
kind: "captureCount"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type CaptureCountName = Extract<SettingChange, CountDiscriminant>["name"]
|
|
57
|
+
|
|
58
|
+
export type CaptureSwitchName = Extract<SettingChange, SwitchDiscriminant>["name"]
|
|
59
|
+
|
|
60
|
+
export interface SwitchEditSpec {
|
|
61
|
+
name: CaptureSwitchName
|
|
62
|
+
what: string
|
|
63
|
+
current: boolean
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface EmbeddingChoice {
|
|
67
|
+
value: MemoryConfig["embeddings"]
|
|
68
|
+
label: string
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface ModelEditSpec {
|
|
72
|
+
title: string
|
|
73
|
+
what: string
|
|
74
|
+
kind: "captureModel" | "agentModel"
|
|
75
|
+
current: CurrentModel
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type NumberChange = (value: number) => SettingChange
|
|
79
|
+
|
|
80
|
+
export interface NumberEditSpec {
|
|
81
|
+
title: string
|
|
82
|
+
what: string
|
|
83
|
+
kind: "threshold" | "count"
|
|
84
|
+
current: string
|
|
85
|
+
change: NumberChange
|
|
86
|
+
clear: SettingChange | null
|
|
87
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const MEMORY_SETUP_COMMAND = "memory-setup"
|
|
2
|
+
|
|
3
|
+
export const MEMORY_SETUP_DESCRIPTION = "Choose or attach the global memory vault and write the memory config"
|
|
4
|
+
|
|
5
|
+
export const SETUP_CREATE_OPTION = "Create a new vault"
|
|
6
|
+
|
|
7
|
+
export const SETUP_ATTACH_OPTION = "Attach an existing folder"
|
|
8
|
+
|
|
9
|
+
export const SETUP_MODE_TITLE = "Global memory vault"
|
|
10
|
+
|
|
11
|
+
export const SETUP_VAULT_TITLE = "Vault folder (absolute path)"
|
|
12
|
+
|
|
13
|
+
export const SETUP_KEEP_VAULT_TITLE = "Vault folder (leave empty to keep the current one)"
|
|
14
|
+
|
|
15
|
+
export const SETUP_VAULT_PLACEHOLDER = "Absolute folder path"
|
|
16
|
+
|
|
17
|
+
export const SETUP_CAPTURE_MODEL_TITLE =
|
|
18
|
+
"Chat model for automatic capture (the model in use is the default and Escape keeps the one marked)"
|
|
19
|
+
|
|
20
|
+
export const SETUP_AGENT_MODEL_TITLE =
|
|
21
|
+
"Chat model for the memory agent (a small model, it searches memory for each message; sorted by price; Escape keeps the current one)"
|
|
22
|
+
|
|
23
|
+
export const SETUP_NO_MODEL = "No chat model is available. Connect a model in pi, then run /memory-setup again."
|
|
24
|
+
|
|
25
|
+
export const SETUP_CANCELLED = "Setup cancelled: nothing changed."
|
|
26
|
+
|
|
27
|
+
export const SETUP_DONE = "Memory is set up. Global vault:"
|
|
28
|
+
|
|
29
|
+
export const REPAIR_TITLE = "The memory config needs changes"
|
|
30
|
+
|
|
31
|
+
export const REPAIR_CONFIRM_LINE = "Continue and rewrite it with every key?"
|
|
32
|
+
|
|
33
|
+
export const REPLACE_LINE = "The file is not valid JSON and will be replaced."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CHAT_MODELS_DISCLOSURE,
|
|
3
|
+
DISCLOSURE_TITLE,
|
|
4
|
+
JEV_DISCLOSURE,
|
|
5
|
+
REMOTE_EMBEDDINGS_DISCLOSURE,
|
|
6
|
+
} from "#src/pi/memory-settings"
|
|
7
|
+
import type { SetupDisclosure } from "#src/usecases"
|
|
8
|
+
|
|
9
|
+
export function disclosureText(disclosures: SetupDisclosure[]): string {
|
|
10
|
+
return [DISCLOSURE_TITLE, ...disclosures.map(disclosureLine)].join("\n")
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function disclosureLine(disclosure: SetupDisclosure): string {
|
|
14
|
+
switch (disclosure) {
|
|
15
|
+
case "chat-models":
|
|
16
|
+
return CHAT_MODELS_DISCLOSURE
|
|
17
|
+
case "jev":
|
|
18
|
+
return JEV_DISCLOSURE
|
|
19
|
+
case "remote-embeddings":
|
|
20
|
+
return REMOTE_EMBEDDINGS_DISCLOSURE
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { MemoryCommand, MemoryPaths, MemoryPiContext } from "#src/pi/context"
|
|
2
|
+
import type { MemorySessionKeeper } from "#src/pi/memory-session"
|
|
3
|
+
import { type CurrentModel, chooseModel, RELOAD_NOTE, runSettingsScreen } from "#src/pi/memory-settings"
|
|
4
|
+
import { describeRegistered, describeRegistrationFailure } from "#src/pi/registration-report"
|
|
5
|
+
import {
|
|
6
|
+
type ConfigRepairDraft,
|
|
7
|
+
prepareMemorySettings,
|
|
8
|
+
prepareMemorySetup,
|
|
9
|
+
proposeMemorySetup,
|
|
10
|
+
type RegistrationContext,
|
|
11
|
+
type SetupPreparation,
|
|
12
|
+
type SetupVaultMode,
|
|
13
|
+
setupMemory,
|
|
14
|
+
} from "#src/usecases"
|
|
15
|
+
import {
|
|
16
|
+
MEMORY_SETUP_DESCRIPTION,
|
|
17
|
+
REPAIR_CONFIRM_LINE,
|
|
18
|
+
REPAIR_TITLE,
|
|
19
|
+
REPLACE_LINE,
|
|
20
|
+
SETUP_AGENT_MODEL_TITLE,
|
|
21
|
+
SETUP_ATTACH_OPTION,
|
|
22
|
+
SETUP_CANCELLED,
|
|
23
|
+
SETUP_CAPTURE_MODEL_TITLE,
|
|
24
|
+
SETUP_CREATE_OPTION,
|
|
25
|
+
SETUP_DONE,
|
|
26
|
+
SETUP_KEEP_VAULT_TITLE,
|
|
27
|
+
SETUP_MODE_TITLE,
|
|
28
|
+
SETUP_NO_MODEL,
|
|
29
|
+
SETUP_VAULT_PLACEHOLDER,
|
|
30
|
+
SETUP_VAULT_TITLE,
|
|
31
|
+
} from "./constants.ts"
|
|
32
|
+
import { disclosureText } from "./disclosure.ts"
|
|
33
|
+
import type { VaultStep } from "./types.ts"
|
|
34
|
+
|
|
35
|
+
export function memorySetupCommand(paths: MemoryPaths, sessions: MemorySessionKeeper): MemoryCommand {
|
|
36
|
+
return {
|
|
37
|
+
description: MEMORY_SETUP_DESCRIPTION,
|
|
38
|
+
async handler(_args, ctx) {
|
|
39
|
+
if (!ctx.hasUI) return
|
|
40
|
+
const { registration } = sessions.registrationFlow(ctx, paths)
|
|
41
|
+
await runMemorySetup(ctx, registration)
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function runMemorySetup(ctx: MemoryPiContext, registration: RegistrationContext): Promise<void> {
|
|
47
|
+
const settings = await prepareMemorySettings(registration)
|
|
48
|
+
if (settings.succeeded) {
|
|
49
|
+
await runSettingsScreen(ctx, { registration, changeGlobalVault: (context) => changeVault(ctx, context) })
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
await runFirstSetup(ctx, registration)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function runFirstSetup(ctx: MemoryPiContext, registration: RegistrationContext): Promise<void> {
|
|
56
|
+
const preparation = await prepareSetup(ctx, registration)
|
|
57
|
+
if (!preparation) return
|
|
58
|
+
if (!(await confirmRepair(ctx, preparation.draft))) return cancelled(ctx)
|
|
59
|
+
if (noModelToChoose(ctx, preparation.draft)) return
|
|
60
|
+
const draft = await chooseModels(ctx, preparation.draft)
|
|
61
|
+
if (!draft) return cancelled(ctx)
|
|
62
|
+
await commitVault(ctx, registration, { snapshot: preparation.snapshot, draft })
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function changeVault(ctx: MemoryPiContext, registration: RegistrationContext): Promise<void> {
|
|
66
|
+
const preparation = await prepareSetup(ctx, registration)
|
|
67
|
+
if (!preparation) return
|
|
68
|
+
await commitVault(ctx, registration, preparation)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function commitVault(
|
|
72
|
+
ctx: MemoryPiContext,
|
|
73
|
+
registration: RegistrationContext,
|
|
74
|
+
preparation: VaultStep,
|
|
75
|
+
): Promise<void> {
|
|
76
|
+
const { snapshot, draft } = preparation
|
|
77
|
+
const mode = await askMode(ctx, draft)
|
|
78
|
+
if (!mode) return cancelled(ctx)
|
|
79
|
+
const vault = await askVault(ctx, draft)
|
|
80
|
+
if (typeof vault !== "string") return cancelled(ctx)
|
|
81
|
+
const proposal = await proposeMemorySetup({ draft, vault, mode }, registration)
|
|
82
|
+
if (!proposal.succeeded) return ctx.ui.notify(proposal.problems.join("\n"), "error")
|
|
83
|
+
ctx.ui.notify(disclosureText(proposal.output.disclosures), "warning")
|
|
84
|
+
const result = await setupMemory(
|
|
85
|
+
{
|
|
86
|
+
config: proposal.output.config,
|
|
87
|
+
expectedHash: snapshot.hash,
|
|
88
|
+
replacementConfirmed: draft.replacementRequired,
|
|
89
|
+
},
|
|
90
|
+
registration,
|
|
91
|
+
)
|
|
92
|
+
if (!result.succeeded) return ctx.ui.notify(describeRegistrationFailure(result), "error")
|
|
93
|
+
const saved = describeRegistered(`${SETUP_DONE} ${proposal.output.config.global.vault}`, result.output)
|
|
94
|
+
ctx.ui.notify(`${saved}\n${RELOAD_NOTE}`, "info")
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function cancelled(ctx: MemoryPiContext): void {
|
|
98
|
+
ctx.ui.notify(SETUP_CANCELLED, "info")
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function prepareSetup(ctx: MemoryPiContext, registration: RegistrationContext): Promise<SetupPreparation | null> {
|
|
102
|
+
const preparation = await prepareMemorySetup({ selectedModel: null }, registration)
|
|
103
|
+
if (!preparation.succeeded) {
|
|
104
|
+
ctx.ui.notify(preparation.problems.join("\n"), "error")
|
|
105
|
+
return null
|
|
106
|
+
}
|
|
107
|
+
return preparation.output
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function modelResolved(model: ConfigRepairDraft["capture"]["model"]): boolean {
|
|
111
|
+
return typeof model.provider === "string" && typeof model.id === "string"
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function noModelToChoose(ctx: MemoryPiContext, draft: ConfigRepairDraft): boolean {
|
|
115
|
+
if (ctx.modelRegistry.getAvailable().length > 0) return false
|
|
116
|
+
if (modelResolved(draft.capture.model) && modelResolved(draft.memoryAgent.model)) return false
|
|
117
|
+
ctx.ui.notify(SETUP_NO_MODEL, "error")
|
|
118
|
+
return true
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function inUseOf(ctx: MemoryPiContext): CurrentModel {
|
|
122
|
+
if (!ctx.model) return {}
|
|
123
|
+
return { provider: ctx.model.provider, id: ctx.model.id }
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
async function chooseModels(ctx: MemoryPiContext, draft: ConfigRepairDraft): Promise<ConfigRepairDraft | null> {
|
|
127
|
+
const capture = await chooseModel(ctx, SETUP_CAPTURE_MODEL_TITLE, draft.capture.model, inUseOf(ctx))
|
|
128
|
+
if (!capture) return null
|
|
129
|
+
const agent = await chooseModel(ctx, SETUP_AGENT_MODEL_TITLE, draft.memoryAgent.model, {})
|
|
130
|
+
if (!agent) return null
|
|
131
|
+
return { ...draft, capture: { ...draft.capture, model: capture }, memoryAgent: { model: agent } }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function confirmRepair(ctx: MemoryPiContext, draft: ConfigRepairDraft): Promise<boolean> {
|
|
135
|
+
if (draft.problems.length === 0 && !draft.replacementRequired) return true
|
|
136
|
+
const lines = draft.problems.map((problem) => `- ${problem}`)
|
|
137
|
+
if (draft.replacementRequired) lines.push(REPLACE_LINE)
|
|
138
|
+
return ctx.ui.confirm(REPAIR_TITLE, [...lines, REPAIR_CONFIRM_LINE].join("\n"))
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async function askMode(ctx: MemoryPiContext, draft: ConfigRepairDraft): Promise<SetupVaultMode | null> {
|
|
142
|
+
let options = [SETUP_CREATE_OPTION, SETUP_ATTACH_OPTION]
|
|
143
|
+
if (draft.global.vault) options = [SETUP_ATTACH_OPTION, SETUP_CREATE_OPTION]
|
|
144
|
+
const answer = await ctx.ui.select(SETUP_MODE_TITLE, options)
|
|
145
|
+
if (answer === SETUP_CREATE_OPTION) return "create"
|
|
146
|
+
if (answer === SETUP_ATTACH_OPTION) return "attach"
|
|
147
|
+
return null
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function askVault(ctx: MemoryPiContext, draft: ConfigRepairDraft): Promise<string | undefined> {
|
|
151
|
+
if (draft.global.vault) return ctx.ui.input(SETUP_KEEP_VAULT_TITLE, draft.global.vault)
|
|
152
|
+
return ctx.ui.input(SETUP_VAULT_TITLE, SETUP_VAULT_PLACEHOLDER)
|
|
153
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const MEMORY_SUCCEED_TOOL_NAME = "memory_succeed"
|
|
2
|
+
|
|
3
|
+
export const MEMORY_SUCCEED_TOOL_LABEL = "Memory succeed"
|
|
4
|
+
|
|
5
|
+
export const MEMORY_SUCCEED_TOOL_DESCRIPTION =
|
|
6
|
+
"Use only when the user explicitly asks to replace a memory that stopped being true or was resolved. Read it with memory_get first."
|
|
7
|
+
|
|
8
|
+
export const REPLACED_PREFIX = "Replaced in"
|
|
9
|
+
|
|
10
|
+
export const NEW_NOTE_LABEL = "new note:"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ChangeResponse, reportFailure, reportSuccess } from "#src/pi/change-report"
|
|
2
|
+
import type { MemoryPaths } from "#src/pi/context"
|
|
3
|
+
import { type MemorySessionKeeper, noSessionResponse } from "#src/pi/memory-session"
|
|
4
|
+
import { succeedMemory } from "#src/usecases"
|
|
5
|
+
import {
|
|
6
|
+
MEMORY_SUCCEED_TOOL_DESCRIPTION,
|
|
7
|
+
MEMORY_SUCCEED_TOOL_LABEL,
|
|
8
|
+
MEMORY_SUCCEED_TOOL_NAME,
|
|
9
|
+
NEW_NOTE_LABEL,
|
|
10
|
+
REPLACED_PREFIX,
|
|
11
|
+
} from "./constants.ts"
|
|
12
|
+
import { MemorySucceedParamsSchema } from "./schemas.ts"
|
|
13
|
+
import type { MemorySucceedTool } from "./types.ts"
|
|
14
|
+
|
|
15
|
+
export function memorySucceedTool(paths: MemoryPaths, sessions: MemorySessionKeeper): MemorySucceedTool {
|
|
16
|
+
return {
|
|
17
|
+
name: MEMORY_SUCCEED_TOOL_NAME,
|
|
18
|
+
label: MEMORY_SUCCEED_TOOL_LABEL,
|
|
19
|
+
description: MEMORY_SUCCEED_TOOL_DESCRIPTION,
|
|
20
|
+
parameters: MemorySucceedParamsSchema,
|
|
21
|
+
async execute(_toolCallId, params, signal, _onUpdate, ctx): Promise<ChangeResponse> {
|
|
22
|
+
const context = sessions.currentOperation(ctx.cwd, paths, signal)
|
|
23
|
+
if (!context) return noSessionResponse()
|
|
24
|
+
const { vault, path, folder, statement, type, body, dontForget } = params
|
|
25
|
+
const result = await succeedMemory({ vault, path, folder, draft: { statement, type, body, dontForget } }, context)
|
|
26
|
+
if (!result.succeeded) return reportFailure(result, path)
|
|
27
|
+
const { archivedPath, successorPath, maintenanceProblems } = result.output
|
|
28
|
+
return reportSuccess(
|
|
29
|
+
`${REPLACED_PREFIX} ${result.output.vault}: ${archivedPath}; ${NEW_NOTE_LABEL} ${successorPath}`,
|
|
30
|
+
maintenanceProblems,
|
|
31
|
+
)
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Type from "typebox"
|
|
2
|
+
|
|
3
|
+
import { SucceedMemoryRequestSchema } from "#src/usecases"
|
|
4
|
+
|
|
5
|
+
export const MemorySucceedParamsSchema = Type.Object(
|
|
6
|
+
{
|
|
7
|
+
vault: Type.With(SucceedMemoryRequestSchema.properties.vault, {
|
|
8
|
+
description: "global: about the user. project: about this project. The vault the old note was read from.",
|
|
9
|
+
}),
|
|
10
|
+
path: Type.With(SucceedMemoryRequestSchema.properties.path, {
|
|
11
|
+
description: "The old note's path, exactly as read with memory_get.",
|
|
12
|
+
}),
|
|
13
|
+
folder: Type.With(SucceedMemoryRequestSchema.properties.folder, {
|
|
14
|
+
description: "Subject folder of the new note, in English, from general to specific. Reuse a folder that exists.",
|
|
15
|
+
}),
|
|
16
|
+
statement: Type.With(SucceedMemoryRequestSchema.properties.draft.properties.statement, {
|
|
17
|
+
description: "The new note's name, in English: one short statement saying what is true now.",
|
|
18
|
+
}),
|
|
19
|
+
type: Type.With(SucceedMemoryRequestSchema.properties.draft.properties.type, {
|
|
20
|
+
description: "The kind of memory of the new note.",
|
|
21
|
+
}),
|
|
22
|
+
body: Type.With(SucceedMemoryRequestSchema.properties.draft.properties.body, {
|
|
23
|
+
description: "The full detail of the new note, in English. Never empty.",
|
|
24
|
+
}),
|
|
25
|
+
dontForget: Type.With(SucceedMemoryRequestSchema.properties.draft.properties.dontForget, {
|
|
26
|
+
description: "true only when the new note must be loaded in every session.",
|
|
27
|
+
}),
|
|
28
|
+
},
|
|
29
|
+
{ additionalProperties: false },
|
|
30
|
+
)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@earendil-works/pi-coding-agent"
|
|
2
|
+
import type { Static } from "typebox"
|
|
3
|
+
|
|
4
|
+
import type { MemorySucceedParamsSchema } from "./schemas.ts"
|
|
5
|
+
|
|
6
|
+
export type MemorySucceedParams = Static<typeof MemorySucceedParamsSchema>
|
|
7
|
+
|
|
8
|
+
export type MemorySucceedTool = ToolDefinition<typeof MemorySucceedParamsSchema, undefined>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const MEMORY_UPDATE_TOOL_NAME = "memory_update"
|
|
2
|
+
|
|
3
|
+
export const MEMORY_UPDATE_TOOL_LABEL = "Memory update"
|
|
4
|
+
|
|
5
|
+
export const MEMORY_UPDATE_TOOL_DESCRIPTION =
|
|
6
|
+
"Use only when the user explicitly asks to change a memory. Read it with memory_get first."
|
|
7
|
+
|
|
8
|
+
export const UPDATED_PREFIX = "Updated in"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ChangeResponse, reportFailure, reportSuccess } from "#src/pi/change-report"
|
|
2
|
+
import type { MemoryPaths } from "#src/pi/context"
|
|
3
|
+
import { type MemorySessionKeeper, noSessionResponse } from "#src/pi/memory-session"
|
|
4
|
+
import { updateMemory } from "#src/usecases"
|
|
5
|
+
import {
|
|
6
|
+
MEMORY_UPDATE_TOOL_DESCRIPTION,
|
|
7
|
+
MEMORY_UPDATE_TOOL_LABEL,
|
|
8
|
+
MEMORY_UPDATE_TOOL_NAME,
|
|
9
|
+
UPDATED_PREFIX,
|
|
10
|
+
} from "./constants.ts"
|
|
11
|
+
import { MemoryUpdateParamsSchema } from "./schemas.ts"
|
|
12
|
+
import type { MemoryUpdateTool } from "./types.ts"
|
|
13
|
+
|
|
14
|
+
export function memoryUpdateTool(paths: MemoryPaths, sessions: MemorySessionKeeper): MemoryUpdateTool {
|
|
15
|
+
return {
|
|
16
|
+
name: MEMORY_UPDATE_TOOL_NAME,
|
|
17
|
+
label: MEMORY_UPDATE_TOOL_LABEL,
|
|
18
|
+
description: MEMORY_UPDATE_TOOL_DESCRIPTION,
|
|
19
|
+
parameters: MemoryUpdateParamsSchema,
|
|
20
|
+
async execute(_toolCallId, params, signal, _onUpdate, ctx): Promise<ChangeResponse> {
|
|
21
|
+
const context = sessions.currentOperation(ctx.cwd, paths, signal)
|
|
22
|
+
if (!context) return noSessionResponse()
|
|
23
|
+
const result = await updateMemory(params, context)
|
|
24
|
+
if (!result.succeeded) return reportFailure(result, params.path)
|
|
25
|
+
const { vault, path, maintenanceProblems } = result.output
|
|
26
|
+
return reportSuccess(`${UPDATED_PREFIX} ${vault}: ${path}`, maintenanceProblems)
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Type from "typebox"
|
|
2
|
+
|
|
3
|
+
import { UpdateMemoryRequestSchema } from "#src/usecases"
|
|
4
|
+
|
|
5
|
+
export const MemoryUpdateParamsSchema = Type.Object(
|
|
6
|
+
{
|
|
7
|
+
vault: Type.With(UpdateMemoryRequestSchema.properties.vault, {
|
|
8
|
+
description: "global: about the user. project: about this project. The vault the note was read from.",
|
|
9
|
+
}),
|
|
10
|
+
path: Type.With(UpdateMemoryRequestSchema.properties.path, {
|
|
11
|
+
description: "The note's path, exactly as read with memory_get. A new name needs a new note, not an update.",
|
|
12
|
+
}),
|
|
13
|
+
body: Type.With(UpdateMemoryRequestSchema.properties.body, {
|
|
14
|
+
description: "The full new body, in English. Never empty.",
|
|
15
|
+
}),
|
|
16
|
+
type: Type.With(UpdateMemoryRequestSchema.properties.type, {
|
|
17
|
+
description: "Only when the kind of memory changes; leave out to keep it.",
|
|
18
|
+
}),
|
|
19
|
+
dontForget: Type.With(UpdateMemoryRequestSchema.properties.dontForget, {
|
|
20
|
+
description: "true to load it in every session, false to stop; leave out to keep it.",
|
|
21
|
+
}),
|
|
22
|
+
},
|
|
23
|
+
{ additionalProperties: false },
|
|
24
|
+
)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@earendil-works/pi-coding-agent"
|
|
2
|
+
import type { Static } from "typebox"
|
|
3
|
+
|
|
4
|
+
import type { MemoryUpdateParamsSchema } from "./schemas.ts"
|
|
5
|
+
|
|
6
|
+
export type MemoryUpdateParams = Static<typeof MemoryUpdateParamsSchema>
|
|
7
|
+
|
|
8
|
+
export type MemoryUpdateTool = ToolDefinition<typeof MemoryUpdateParamsSchema, undefined>
|