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,239 @@
|
|
|
1
|
+
import type { Static, TSchema } from "typebox"
|
|
2
|
+
|
|
3
|
+
import type { CaptureCadenceSettings } from "#src/domain/capture"
|
|
4
|
+
import type { Absent, Failed, Succeeded } from "#src/shared"
|
|
5
|
+
import type {
|
|
6
|
+
CaptureWhenSchema,
|
|
7
|
+
ChatModelReferenceSchema,
|
|
8
|
+
ConfigFieldObservationSchema,
|
|
9
|
+
MemoryConfigSchema,
|
|
10
|
+
ProjectEntrySchema,
|
|
11
|
+
} from "./schemas.ts"
|
|
12
|
+
|
|
13
|
+
export type MemoryConfig = Static<typeof MemoryConfigSchema>
|
|
14
|
+
|
|
15
|
+
export type ProjectEntry = Static<typeof ProjectEntrySchema>
|
|
16
|
+
|
|
17
|
+
export type LegacyCaptureWhen = Static<typeof CaptureWhenSchema>
|
|
18
|
+
|
|
19
|
+
export type ParseConfigResult = Succeeded<MemoryConfig> | Failed
|
|
20
|
+
|
|
21
|
+
export type ConfigFieldObservation = Static<typeof ConfigFieldObservationSchema>
|
|
22
|
+
|
|
23
|
+
export interface ConfigObservationRule {
|
|
24
|
+
field: ConfigFieldObservation["field"]
|
|
25
|
+
index: number
|
|
26
|
+
path: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ConfigDocumentInspection {
|
|
30
|
+
config: Succeeded<MemoryConfig> | Absent
|
|
31
|
+
observations: ConfigFieldObservation[]
|
|
32
|
+
projectCount: number
|
|
33
|
+
shapeProblems: string[]
|
|
34
|
+
invalidTokenOrder: boolean
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ConfigJsonInspection extends ConfigDocumentInspection {
|
|
38
|
+
validJson: true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ConfigSyntaxFailure {
|
|
42
|
+
validJson: false
|
|
43
|
+
message: string
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type ConfigInspection = ConfigJsonInspection | ConfigSyntaxFailure
|
|
47
|
+
|
|
48
|
+
export interface ConfigAssessment {
|
|
49
|
+
lexicalParse: ParseConfigResult
|
|
50
|
+
repair: ConfigRepairDraft
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type ResolveProjectResult = Succeeded<ProjectEntry> | Absent
|
|
54
|
+
|
|
55
|
+
export type ChatModelReference = Static<typeof ChatModelReferenceSchema>
|
|
56
|
+
|
|
57
|
+
export interface ConfigObjectRule {
|
|
58
|
+
kind: "object"
|
|
59
|
+
path: string
|
|
60
|
+
keys: string[]
|
|
61
|
+
required: string[]
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface ConfigValueRule {
|
|
65
|
+
kind: "value"
|
|
66
|
+
path: string
|
|
67
|
+
schema: TSchema
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type ConfigFieldRule = ConfigObjectRule | ConfigValueRule
|
|
71
|
+
|
|
72
|
+
export interface ConfigRuleSelection {
|
|
73
|
+
projectCount: number
|
|
74
|
+
embeddings: string | null
|
|
75
|
+
decisionModel: string | null
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface ConfigRegistrations {
|
|
79
|
+
global: Partial<MemoryConfig["global"]>
|
|
80
|
+
projects: Partial<ProjectEntry>[]
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface CaptureFields extends Partial<CaptureCadenceSettings> {
|
|
84
|
+
model: Partial<ChatModelReference>
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface MemoryAgentFields {
|
|
88
|
+
model: Partial<ChatModelReference>
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface EmbeddingFields {
|
|
92
|
+
provider?: MemoryConfig["embeddings"]["provider"]
|
|
93
|
+
model?: MemoryConfig["embeddings"]["model"]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface DecisionFields {
|
|
97
|
+
provider?: MemoryConfig["decisionModel"]["provider"]
|
|
98
|
+
model?: MemoryConfig["decisionModel"]["model"]
|
|
99
|
+
endpoint?: string
|
|
100
|
+
maxTokens?: number
|
|
101
|
+
headMaxTokens?: number
|
|
102
|
+
gateThreshold?: number
|
|
103
|
+
relevanceThreshold?: number
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface ConfigFields extends ConfigRegistrations {
|
|
107
|
+
limits: Partial<MemoryConfig["limits"]>
|
|
108
|
+
capture: CaptureFields
|
|
109
|
+
memoryAgent: MemoryAgentFields
|
|
110
|
+
context: Partial<MemoryConfig["context"]>
|
|
111
|
+
embeddings: EmbeddingFields
|
|
112
|
+
decisionModel: DecisionFields
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface ConfigRepairDraft extends ConfigFields {
|
|
116
|
+
limits: MemoryConfig["limits"]
|
|
117
|
+
replacementRequired: boolean
|
|
118
|
+
problems: string[]
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface SetupProposal {
|
|
122
|
+
config: ConfigFields
|
|
123
|
+
vault: string
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface InitProposal {
|
|
127
|
+
config: MemoryConfig
|
|
128
|
+
folder: string
|
|
129
|
+
name: string
|
|
130
|
+
vault: string
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface ConfigLocationPaths {
|
|
134
|
+
config: ConfigRegistrations
|
|
135
|
+
configPath: string
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface ConfigInfrastructure extends ConfigLocationPaths {
|
|
139
|
+
indexPath: string
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface VaultRegistration {
|
|
143
|
+
field: string
|
|
144
|
+
path: string
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export type SetupDisclosure = "chat-models" | "jev" | "remote-embeddings"
|
|
148
|
+
|
|
149
|
+
export interface CaptureModelChange {
|
|
150
|
+
kind: "captureModel"
|
|
151
|
+
model: ChatModelReference
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export interface AgentModelChange {
|
|
155
|
+
kind: "agentModel"
|
|
156
|
+
model: ChatModelReference
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export interface CaptureCountChange {
|
|
160
|
+
kind: "captureCount"
|
|
161
|
+
name: "nudgeInterval" | "nudgeToolCalls" | "flushMinTurns"
|
|
162
|
+
value: number
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export interface CaptureSwitchChange {
|
|
166
|
+
kind: "captureSwitch"
|
|
167
|
+
name: "reviewEnabled" | "flushOnCompact" | "flushOnShutdown"
|
|
168
|
+
value: boolean
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export interface EmbeddingsChange {
|
|
172
|
+
kind: "embeddings"
|
|
173
|
+
embeddings: MemoryConfig["embeddings"]
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export interface JevDecisionChange {
|
|
177
|
+
kind: "decision"
|
|
178
|
+
provider: "typesafe"
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface LayaDecisionChange {
|
|
182
|
+
kind: "decision"
|
|
183
|
+
provider: "laya"
|
|
184
|
+
endpoint: string
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface ThresholdChange {
|
|
188
|
+
kind: "gateThreshold" | "relevanceThreshold"
|
|
189
|
+
value: number | null
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export interface BudgetChange {
|
|
193
|
+
kind: "budgetChars"
|
|
194
|
+
value: number
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export interface LimitChange {
|
|
198
|
+
kind: "limit"
|
|
199
|
+
name: keyof MemoryConfig["limits"]
|
|
200
|
+
value: number
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export interface ProjectVaultChange {
|
|
204
|
+
kind: "projectVault"
|
|
205
|
+
name: string
|
|
206
|
+
vault: string
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export interface RemoveProjectChange {
|
|
210
|
+
kind: "removeProject"
|
|
211
|
+
name: string
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export type DecisionChange = JevDecisionChange | LayaDecisionChange
|
|
215
|
+
|
|
216
|
+
export type SettingChange =
|
|
217
|
+
| CaptureModelChange
|
|
218
|
+
| AgentModelChange
|
|
219
|
+
| CaptureCountChange
|
|
220
|
+
| CaptureSwitchChange
|
|
221
|
+
| EmbeddingsChange
|
|
222
|
+
| DecisionChange
|
|
223
|
+
| ThresholdChange
|
|
224
|
+
| BudgetChange
|
|
225
|
+
| LimitChange
|
|
226
|
+
| ProjectVaultChange
|
|
227
|
+
| RemoveProjectChange
|
|
228
|
+
|
|
229
|
+
export type SettingNumberKind = "threshold" | "count"
|
|
230
|
+
|
|
231
|
+
export interface ConfigCandidate extends Omit<MemoryConfig, "decisionModel"> {
|
|
232
|
+
decisionModel: DecisionFields
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export type NextConfig = Succeeded<ConfigCandidate> | Failed
|
|
236
|
+
|
|
237
|
+
export type SettingNumberResult = Succeeded<number> | Failed
|
|
238
|
+
|
|
239
|
+
export type ProjectReplacement = (project: ProjectEntry) => ProjectEntry | null
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DEFAULT_CUTOFFS } from "./constants.ts"
|
|
2
|
+
import type { DecisionCutoffs, DecisionProvider } from "./types.ts"
|
|
3
|
+
|
|
4
|
+
export function defaultCutoffs(provider: DecisionProvider): Partial<DecisionCutoffs> {
|
|
5
|
+
const cutoffs = DEFAULT_CUTOFFS.get(provider)
|
|
6
|
+
if (cutoffs) return cutoffs
|
|
7
|
+
return {}
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function isLoopbackEndpoint(endpoint: string): boolean {
|
|
2
|
+
try {
|
|
3
|
+
const url = new URL(endpoint)
|
|
4
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return false
|
|
5
|
+
if (url.username || url.password || url.search || url.hash) return false
|
|
6
|
+
if (url.pathname !== "/v1/systemone") return false
|
|
7
|
+
return url.hostname === "127.0.0.1" || url.hostname === "[::1]"
|
|
8
|
+
} catch {
|
|
9
|
+
return false
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MAX_FAILURE_DETAIL_CHARS } from "./constants.ts"
|
|
2
|
+
|
|
3
|
+
export function boundedFailureDetail(detail: string): string {
|
|
4
|
+
if (detail.length <= MAX_FAILURE_DETAIL_CHARS) return detail
|
|
5
|
+
const last = detail.charCodeAt(MAX_FAILURE_DETAIL_CHARS - 1)
|
|
6
|
+
if (last >= 0xd800 && last <= 0xdbff) return detail.slice(0, MAX_FAILURE_DETAIL_CHARS - 1)
|
|
7
|
+
return detail.slice(0, MAX_FAILURE_DETAIL_CHARS)
|
|
8
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CandidateScore } from "./types.ts"
|
|
2
|
+
|
|
3
|
+
function validateProbability(probability: number): void {
|
|
4
|
+
if (!Number.isFinite(probability) || probability < 0 || probability > 1) {
|
|
5
|
+
throw new RangeError("Decision probability must be finite and between 0 and 1")
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function validateCutoff(cutoff: number): void {
|
|
10
|
+
if (!Number.isFinite(cutoff) || cutoff < 0 || cutoff > 1) {
|
|
11
|
+
throw new RangeError("Decision cutoff must be finite and between 0 and 1")
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function shouldRetrieveMemory(probability: number, cutoff: number): boolean {
|
|
16
|
+
validateProbability(probability)
|
|
17
|
+
validateCutoff(cutoff)
|
|
18
|
+
return probability > cutoff
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function compareScores(left: CandidateScore, right: CandidateScore): number {
|
|
22
|
+
const probabilityOrder = right.probability - left.probability
|
|
23
|
+
if (probabilityOrder !== 0) return probabilityOrder
|
|
24
|
+
|
|
25
|
+
for (const field of ["vault", "id", "revision"] as const) {
|
|
26
|
+
if (left.identity[field] < right.identity[field]) return -1
|
|
27
|
+
if (left.identity[field] > right.identity[field]) return 1
|
|
28
|
+
}
|
|
29
|
+
return 0
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function rankCandidates(scores: readonly CandidateScore[], cutoff: number): CandidateScore[] {
|
|
33
|
+
validateCutoff(cutoff)
|
|
34
|
+
for (const score of scores) validateProbability(score.probability)
|
|
35
|
+
return scores.filter((score) => score.probability >= cutoff).sort(compareScores)
|
|
36
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export interface CandidateIdentity {
|
|
2
|
+
vault: "global" | "project"
|
|
3
|
+
id: string
|
|
4
|
+
revision: string
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface DecisionRequest {
|
|
8
|
+
message: string
|
|
9
|
+
project: string | null
|
|
10
|
+
folder: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface CandidateContent {
|
|
14
|
+
statement: string
|
|
15
|
+
body: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface CandidateDecisionRequest {
|
|
19
|
+
message: string
|
|
20
|
+
identity: CandidateIdentity
|
|
21
|
+
candidate: CandidateContent
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface CandidateScore {
|
|
25
|
+
identity: CandidateIdentity
|
|
26
|
+
probability: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface DecisionUsage {
|
|
30
|
+
inputTokens: number
|
|
31
|
+
outputTokens: number
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface DecisionDiagnostics {
|
|
35
|
+
provider: "laya" | "typesafe"
|
|
36
|
+
requestedModel: string
|
|
37
|
+
reportedModel: string | null
|
|
38
|
+
usage: DecisionUsage | null
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface RelevanceDecision {
|
|
42
|
+
probability: number
|
|
43
|
+
diagnostics: DecisionDiagnostics
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type DecisionFailureCode =
|
|
47
|
+
| "unsafe-endpoint"
|
|
48
|
+
| "invalid-settings"
|
|
49
|
+
| "unavailable"
|
|
50
|
+
| "http-error"
|
|
51
|
+
| "invalid-response"
|
|
52
|
+
| "routing-missing"
|
|
53
|
+
| "truncated"
|
|
54
|
+
| "collapsed-options"
|
|
55
|
+
| "aborted"
|
|
56
|
+
|
|
57
|
+
export interface DecisionFailure {
|
|
58
|
+
succeeded: false
|
|
59
|
+
code: DecisionFailureCode
|
|
60
|
+
diagnostics: DecisionDiagnostics
|
|
61
|
+
httpStatus?: number
|
|
62
|
+
detail?: string
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface DecisionSuccess {
|
|
66
|
+
succeeded: true
|
|
67
|
+
output: RelevanceDecision
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type DecisionResult = DecisionSuccess | DecisionFailure
|
|
71
|
+
|
|
72
|
+
export type DecisionProvider = DecisionDiagnostics["provider"]
|
|
73
|
+
|
|
74
|
+
export interface DecisionCutoffs {
|
|
75
|
+
gate: number
|
|
76
|
+
relevance: number
|
|
77
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { EmbeddingConfiguration, EmbeddingPolicy, MinimumSimilarities } from "./types.ts"
|
|
2
|
+
|
|
3
|
+
export const localEmbeddingConfiguration = {
|
|
4
|
+
provider: "local",
|
|
5
|
+
model: "Xenova/multilingual-e5-small",
|
|
6
|
+
} as const satisfies EmbeddingConfiguration
|
|
7
|
+
|
|
8
|
+
export const openAIEmbeddingConfiguration = {
|
|
9
|
+
provider: "openai",
|
|
10
|
+
model: "text-embedding-3-small",
|
|
11
|
+
} as const satisfies EmbeddingConfiguration
|
|
12
|
+
|
|
13
|
+
export const googleEmbeddingConfiguration = {
|
|
14
|
+
provider: "google",
|
|
15
|
+
model: "gemini-embedding-001",
|
|
16
|
+
} as const satisfies EmbeddingConfiguration
|
|
17
|
+
|
|
18
|
+
export const localEmbeddingPolicy = {
|
|
19
|
+
revision: "761b726dd34fb83930e26aab4e9ac3899aa1fa78",
|
|
20
|
+
dimensions: 384,
|
|
21
|
+
dtype: "cpu-q8-transformers-4.3.1",
|
|
22
|
+
pooling: "mean",
|
|
23
|
+
normalization: "l2",
|
|
24
|
+
queryPrefix: "query: ",
|
|
25
|
+
documentPrefix: "passage: ",
|
|
26
|
+
chunking: "v1-token-aware-512-special-prefix-inclusive-overlap32-mean-chunks-query-refuse",
|
|
27
|
+
} as const satisfies EmbeddingPolicy
|
|
28
|
+
|
|
29
|
+
export const openAIEmbeddingPolicy = {
|
|
30
|
+
revision: "provider-managed",
|
|
31
|
+
dimensions: 1536,
|
|
32
|
+
dtype: "float",
|
|
33
|
+
pooling: "provider",
|
|
34
|
+
normalization: "l2",
|
|
35
|
+
queryPrefix: "",
|
|
36
|
+
documentPrefix: "",
|
|
37
|
+
chunking: "v1-utf8-bytes4096-overlap128-mean-chunks-query-refuse",
|
|
38
|
+
} as const satisfies EmbeddingPolicy
|
|
39
|
+
|
|
40
|
+
export const googleEmbeddingPolicy = {
|
|
41
|
+
revision: "provider-managed",
|
|
42
|
+
dimensions: 768,
|
|
43
|
+
dtype: "float",
|
|
44
|
+
pooling: "provider",
|
|
45
|
+
normalization: "l2",
|
|
46
|
+
queryPrefix: "RETRIEVAL_QUERY",
|
|
47
|
+
documentPrefix: "RETRIEVAL_DOCUMENT",
|
|
48
|
+
chunking: "v1-utf8-bytes1024-overlap128-mean-chunks-query-refuse-autoTruncate-false",
|
|
49
|
+
} as const satisfies EmbeddingPolicy
|
|
50
|
+
|
|
51
|
+
export const MINIMUM_SIMILARITY = {
|
|
52
|
+
local: 0.8,
|
|
53
|
+
openai: null,
|
|
54
|
+
google: null,
|
|
55
|
+
} as const satisfies MinimumSimilarities
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { googleEmbeddingPolicy, localEmbeddingPolicy, openAIEmbeddingPolicy } from "./constants.ts"
|
|
2
|
+
import type { EmbeddingConfiguration, EmbeddingPolicy } from "./types.ts"
|
|
3
|
+
|
|
4
|
+
export function embeddingPolicy(configuration: EmbeddingConfiguration): EmbeddingPolicy {
|
|
5
|
+
switch (configuration.provider) {
|
|
6
|
+
case "local":
|
|
7
|
+
return localEmbeddingPolicy
|
|
8
|
+
case "openai":
|
|
9
|
+
return openAIEmbeddingPolicy
|
|
10
|
+
case "google":
|
|
11
|
+
return googleEmbeddingPolicy
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function embeddingFingerprint(configuration: EmbeddingConfiguration): string {
|
|
16
|
+
const policy = embeddingPolicy(configuration)
|
|
17
|
+
return JSON.stringify([
|
|
18
|
+
"embeddings-v1",
|
|
19
|
+
configuration.provider,
|
|
20
|
+
configuration.model,
|
|
21
|
+
policy.revision,
|
|
22
|
+
policy.dimensions,
|
|
23
|
+
policy.dtype,
|
|
24
|
+
policy.pooling,
|
|
25
|
+
policy.normalization,
|
|
26
|
+
policy.queryPrefix,
|
|
27
|
+
policy.documentPrefix,
|
|
28
|
+
policy.chunking,
|
|
29
|
+
])
|
|
30
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Type from "typebox"
|
|
2
|
+
|
|
3
|
+
export const EmbeddingConfigurationSchema = Type.Union([
|
|
4
|
+
Type.Object(
|
|
5
|
+
{
|
|
6
|
+
provider: Type.Literal("local"),
|
|
7
|
+
model: Type.Literal("Xenova/multilingual-e5-small"),
|
|
8
|
+
},
|
|
9
|
+
{ additionalProperties: false },
|
|
10
|
+
),
|
|
11
|
+
Type.Object(
|
|
12
|
+
{
|
|
13
|
+
provider: Type.Literal("openai"),
|
|
14
|
+
model: Type.Literal("text-embedding-3-small"),
|
|
15
|
+
},
|
|
16
|
+
{ additionalProperties: false },
|
|
17
|
+
),
|
|
18
|
+
Type.Object(
|
|
19
|
+
{
|
|
20
|
+
provider: Type.Literal("google"),
|
|
21
|
+
model: Type.Literal("gemini-embedding-001"),
|
|
22
|
+
},
|
|
23
|
+
{ additionalProperties: false },
|
|
24
|
+
),
|
|
25
|
+
])
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Static } from "typebox"
|
|
2
|
+
|
|
3
|
+
import type { Succeeded } from "#src/shared"
|
|
4
|
+
import type { EmbeddingConfigurationSchema } from "./schemas.ts"
|
|
5
|
+
|
|
6
|
+
export type EmbeddingConfiguration = Static<typeof EmbeddingConfigurationSchema>
|
|
7
|
+
|
|
8
|
+
export interface EmbeddingInput {
|
|
9
|
+
key: string
|
|
10
|
+
text: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface EmbeddingBatchRequest {
|
|
14
|
+
purpose: "query" | "document"
|
|
15
|
+
inputs: readonly EmbeddingInput[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface EmbeddedInput {
|
|
19
|
+
key: string
|
|
20
|
+
vector: readonly number[]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface EmbeddingBatch {
|
|
24
|
+
fingerprint: string
|
|
25
|
+
dimensions: number
|
|
26
|
+
items: readonly EmbeddedInput[]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type EmbeddingFailureStatus = "unavailable" | "input-too-long" | "invalid-input" | "invalid-response" | "aborted"
|
|
30
|
+
|
|
31
|
+
export interface EmbeddingFailure {
|
|
32
|
+
succeeded: false
|
|
33
|
+
status: EmbeddingFailureStatus
|
|
34
|
+
cleanupFailed?: true
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type EmbeddingResult = Succeeded<EmbeddingBatch> | EmbeddingFailure
|
|
38
|
+
|
|
39
|
+
export interface EmbeddingPolicy {
|
|
40
|
+
revision: string
|
|
41
|
+
dimensions: number
|
|
42
|
+
dtype: string
|
|
43
|
+
pooling: string
|
|
44
|
+
normalization: "l2"
|
|
45
|
+
queryPrefix: string
|
|
46
|
+
documentPrefix: string
|
|
47
|
+
chunking: string
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type EmbeddingProvider = EmbeddingConfiguration["provider"]
|
|
51
|
+
|
|
52
|
+
export type MinimumSimilarities = Record<EmbeddingProvider, number | null>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function normalizeVector(values: readonly number[], dimensions: number): number[] | null {
|
|
2
|
+
if (values.length !== dimensions || dimensions < 1 || values.some((value) => !Number.isFinite(value))) {
|
|
3
|
+
return null
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const scale = values.reduce((largest, value) => Math.max(largest, Math.abs(value)), 0)
|
|
7
|
+
if (scale === 0) {
|
|
8
|
+
return null
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const scaled = values.map((value) => value / scale)
|
|
12
|
+
const norm = Math.sqrt(scaled.reduce((sum, value) => sum + value * value, 0))
|
|
13
|
+
return scaled.map((value) => value / norm)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function aggregateVectors(vectors: readonly (readonly number[])[], dimensions: number): number[] | null {
|
|
17
|
+
if (vectors.length === 0) {
|
|
18
|
+
return null
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const sum = Array<number>(dimensions).fill(0)
|
|
22
|
+
for (const values of vectors) {
|
|
23
|
+
const vector = normalizeVector(values, dimensions)
|
|
24
|
+
if (!vector) {
|
|
25
|
+
return null
|
|
26
|
+
}
|
|
27
|
+
for (const [index, value] of vector.entries()) {
|
|
28
|
+
const previous = sum[index]
|
|
29
|
+
if (typeof previous !== "number") {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
sum[index] = previous + value / vectors.length
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return normalizeVector(sum, dimensions)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function cosine(left: readonly number[], right: readonly number[]): number {
|
|
39
|
+
if (left.length !== right.length) throw new RangeError("Vectors must have the same dimensions")
|
|
40
|
+
|
|
41
|
+
let dot = 0
|
|
42
|
+
let leftNorm = 0
|
|
43
|
+
let rightNorm = 0
|
|
44
|
+
for (const [index, value] of left.entries()) {
|
|
45
|
+
const other = right[index]
|
|
46
|
+
if (typeof other !== "number") throw new RangeError("Vectors must have the same dimensions")
|
|
47
|
+
dot += value * other
|
|
48
|
+
leftNorm += value * value
|
|
49
|
+
rightNorm += other * other
|
|
50
|
+
}
|
|
51
|
+
if (leftNorm === 0 || rightNorm === 0) throw new RangeError("Vectors must be nonzero")
|
|
52
|
+
return dot / Math.sqrt(leftNorm * rightNorm)
|
|
53
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function displayIndexText(text: string): string {
|
|
2
|
+
if (/[<>[\]`]/.test(text)) {
|
|
3
|
+
return displayIndexName(text)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return text
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function displayIndexName(name: string): string {
|
|
10
|
+
if (name.length === 0) {
|
|
11
|
+
return "<code></code>"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const runs = [...name.matchAll(/`+/g)].map((match) => match[0].length)
|
|
15
|
+
const fence = "`".repeat(Math.max(0, ...runs) + 1)
|
|
16
|
+
const mixedEdgeSpaces = name.startsWith(" ") && name.endsWith(" ") && /[^ ]/.test(name)
|
|
17
|
+
if (name.startsWith("`") || name.endsWith("`") || mixedEdgeSpaces) {
|
|
18
|
+
return `${fence} ${name} ${fence}`
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return `${fence}${name}${fence}`
|
|
22
|
+
}
|